您的位置:首页 > 移动开发 > Android开发

Android开发秘籍学习笔记(九)

2015-05-27 14:08 246 查看
该目录为Android开发秘籍学习笔记有关用户界面布局的相关笔记

其实呢,要学习有关Android用户界面布局的开发,我们还是必须得利用Google提供给我们的Android Design,鉴于很多人无法翻墙,有的网站提供了镜像供我们访问学习,网址:http://adchs.github.io/,安卓巴士同样提供了相关的镜像大家也可以去访问http://www.apkbus.com/design/

但我还是把《Android开发秘籍》这本书上的有关用户界面布局的笔记整理出来吧

Android中尺度单位:

我们在写Android的布局文件的时候经常会用到一些尺度单位,Android中有pxdp(dip)spinmm,pt这些尺度单位。

px: 屏幕上实际的像素值
dp(dip):独立于设备的,相对一个160dpi屏幕的像素值,这里又提到了dpi,dpi(ppi)是像素密度,即是每英寸上的像素点,计算方法为 dpi
= √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数,dpi越高则表示每英寸上的像素点越多,屏幕显示也越清晰,dp(dip)与屏幕尺寸和分辨率无关,而与它们两的比值相关,dp(dip)和px有个简单的换算关系 dp*ppi/160 = px,所以当dpi等于160时,1dp
= 1px
sp:独立于设备的像素值,根据用户字体大小的偏好进行调整。
in:基于屏幕物理尺寸的英寸只。
mm:基于屏幕物理尺寸的毫米值
pt:以1/72英寸大小的点来度量的值,同样基于屏幕的物理尺寸。

Android中颜色的表示:

12位颜色值#rgb。
带alpha透明通道的16位颜色值#argb
24位颜色值#rrggbb
带alpha透明通道的32位颜色值#aarrggbb

Android项目中的资源目录:

Android项目中各个文件夹的作用,课本上有很详细的笔记,我在这里就不介绍了,初学者也应该对此有所了解。接下来我就说说横竖屏的切换布局文件的加载问题。我们自己在使用Android手机的时候有时候需要切换屏幕方向(应用程序没有固定屏幕方向的时候),切换屏幕方向的时候我们的布局文件可能就无法适应屏幕了。所以有时候我们需要编写两个布局文件,一个横屏,一个竖屏的。那么Android系统是如何切换布局文件呢?我们又该如何编写程序呢?Android在这个方面真的是非常的人性化,我们不需要编写任何代码,只需要按照下列步骤就能在屏幕切换时自动加载相应的布局文件。
方法:在res目录下建立layout-land和layout-port目录,相应的layout文件名不变,比如:layout-land是横屏的layout,layout-port是竖屏的layout,其他的不用管,横竖屏切换时程序调用Activity的onCreate方法中的setContentView(xxx),并自动加载相应的布局。(注意layout-land和layout-port下的布局文件的名字是需要一致的,否则无法正确加载)
还有其他编代码的方式,但我自己没有测试也就不贴出来了,大家可以去看http://blog.csdn.net/junhuahouse/article/details/38109125

零散笔记:

布局文件有太多的控件,所以这些笔记就不整理了,基本只要多写写就能记得住。下面就是些零散的实验:

margin和padding的区别:padding是UI元素的一部分,它值算在控件的长度中。
margin不被计入UI元素的大小中,margin的值不计算在控件的长度中。

相对布局中的重要属性:

相对于兄弟元素

android:layout_below="@id/aaa":在指定View的下方

android:layout_above="@id/xxx":在指定View的上方

android:layout_toLeftOf="@id/bbb":在指定View的左边

android:layout_toRightOf="@id/cccc":在指定View的右边

相对于父元素

android:layout_alignParentLeft="true":在父元素内左边

android:layout_alignParentRight="true":在父元素内右边

android:layout_alignParentTop="true":在父元素内顶部

android:layout_alignParentBottom="true":在父元素内底部

对齐方式

android:layout_centerInParent="true":居中布局

android:layout_centerVertical="true":水平居中布局

android:layout_centerHorizontal="true":垂直居中布局

android:layout_alignTop="@id/xxx":与指定View的上边界一致

android:layout_alignBottom="@id/xxx":与指定View下边界一致

android:layout_alignLeft="@id/xxx":与指定View的左边界一致

android:layout_alignRight="@id/xxx":与指定View的右边界一致

间隔

android:layout_marginBottom=""; 离某元素底边缘的距离

android:layout_marginLeft=""; 离某元素左边缘的距离

android:layout_marginRight ="";离某元素右边缘的距离

android:layout_marginTop=""; 离某元素上边缘的距离

android:layout_paddingBottom=""; 离父元素底边缘的距离

android:layout_paddingLeft=""; 离父元素左边缘的距离

android:layout_paddingRight ="";离父元素右边缘的距离

android:layout_paddingTop=""; 离父元素上边缘的距离

EdtiText中的重要属性:

inputType:
android:inputType="none"

  android:inputType="text"

  android:inputType="textCapCharacters" 字母大写

  android:inputType="textCapWords" 首字母大写

  android:inputType="textCapSentences" 仅第一个字母大写

  android:inputType="textAutoCorrect" 自动完成

  android:inputType="textAutoComplete" 自动完成

  android:inputType="textMultiLine" 多行输入

  android:inputType="textImeMultiLine" 输入法多行(如果支持)

  android:inputType="textNoSuggestions" 不提示

  android:inputType="textUri" 网址

  android:inputType="textEmailAddress" 电子邮件地址

  android:inputType="textEmailSubject" 邮件主题

  android:inputType="textShortMessage" 短讯

  android:inputType="textLongMessage" 长信息

  android:inputType="textPersonName" 人名

  android:inputType="textPostalAddress" 地址

  android:inputType="textPassword" 密码

  android:inputType="textVisiblePassword" 可见密码

  android:inputType="textWebEditText" 作为网页表单的文本

  android:inputType="textFilter" 文本筛选过滤

  android:inputType="textPhonetic" 拼音输入 //数值类型

  android:inputType="number" 数字

  android:inputType="numberSigned" 带符号数字格式

  android:inputType="numberDecimal" 带小数点的浮点格式

  android:inputType="phone" 拨号键盘

  android:inputType="datetime" 时间日期

  android:inputType="date" 日期键盘

  android:inputType="time" 时间键盘

ImageView和ImageButton的重要属性:

ScaleType:
scaleType的属性值有:matrix fitXY fitStart fitCenter fitEnd center centerCrop centerInside

它们之间的区别如下:

matrix 用矩阵来绘制(从左上角起始的矩阵区域)

fitXY 把图片不按比例扩大/缩小到View的大小显示(确保图片会完整显示,并充满View)

fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置(图片会完整显示)

fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示(图片会完整显示)

fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置(图片会完整显示)

center 按图片的原来size居中显示,当图片宽超过View的宽,则截取图片的居中部分显示,当图片宽小于View的宽,则图片居中显示

centerCrop 按比例扩大/缩小图片的size居中显示,使得图片的高等于View的高,使得图片宽等于或大于View的宽

centerInside 将图片的内容完整居中显示,使得图片按比例缩小或原来的大小(图片比View小时)使得图片宽等于或小于View的宽 (图片会完整显示)





上面两幅图片中,一副是图片大小小于ImageView的大小的,另一幅是图片大小大于ImageView的大小的。此处转载自http://blog.csdn.net/xilibi2003/article/details/6628668
下面这幅图片是ImageButton的:



通过selector选择器为Button设置点击的视觉效果:

一般的selector选择器的写法如下:
<?xml version="1.0" encoding="utf-8" ?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

<!-- 默认时的背景图片 -->

<item android:drawable="@drawable/pic1" />

<!-- 没有焦点时的背景图片 -->

<item android:state_window_focused="false"

android:drawable="@drawable/pic1" />

<!-- 非触摸模式下获得焦点并单击时的背景图片 -->

<item android:state_focused="true" android:state_pressed="true"

android:drawable= "@drawable/pic2" />

<!-- 触摸模式下单击时的背景图片 -->

<item android:state_focused="false" android:state_pressed="true"

android:drawable="@drawable/pic3" />

<!--选中时的图片背景 -->

<item android:state_selected="true"

android:drawable="@drawable/pic4" />

<!--获得焦点时的图片背景 -->

<item android:state_focused="true"

android:drawable="@drawable/pic5" />

</selector>

最后只需要在<Button />里加两项。

android:backgroud="@drawable/button_src"。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: