该目录为Android开发秘籍学习笔记有关用户界面布局的相关笔记
其实呢,要学习有关Android用户界面布局的开发,我们还是必须得利用Google提供给我们的Android Design,鉴于很多人无法翻墙,有的网站提供了镜像供我们访问学习,网址:http://adchs.github.io/,安卓巴士同样提供了相关的镜像大家也可以去访问http://www.apkbus.com/design/
但我还是把《Android开发秘籍》这本书上的有关用户界面布局的笔记整理出来吧
Android中尺度单位:
我们在写Android的布局文件的时候经常会用到一些尺度单位,Android中有px,dp(dip),sp,in,mm,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.youkuaiyun.com/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=""; 离父元素上边缘的距离
android:layout_below="@id/aaa"
android:layout_above="@id/xxx"
android:layout_toLeftOf="@id/
android:layout_toRightOf="@id/
相对于父元素
android:layout_
android:layout_
android:layout_alignParentTop=
android:layout_
对齐方式
android:layout_centerInParent=
android:layout_centerVertical=
android:layout_
android:layout_alignTop="@id/
android:layout_alignBottom="@
android:layout_alignLeft="@id/
android:layout_alignRight="@
间隔
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" 时间键盘
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:
center 按图片的原来size居中显示,当图片宽超过View的宽,则截取图片的居中部分显示,当图片宽小于View的宽,则图片居中显示
centerCrop 按 比例扩大/缩小图片的size居中显示,使得图片的高等于View的高,使得图片宽等于或大于View的宽
centerInside 将 图片的内容完整居中显示,使得图片按比例缩小或原来的大小(图片比View小时)使得图片宽等于或小于View的宽 ( 图片会完整显示)
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.youkuaiyun.com/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>
<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"。
android:backgroud="@drawable/button_src"。