Test

Anroid开发总结一
                         Koupoo   2011-12-18
几条基本的准则
设计的 UI 应尽量适应各种的显示屏分辨率 ;
不要在非主线程中操作 UI
在非特殊情况下,应该避免使用 px 作为尺寸单位,而使用 dip sp
 
 
尺寸单位
使用 Android 为系统的机器的屏幕大小尺寸有很多种,常见的有 240x320 320x480 480x800 。理想下,我们希望程序能适应各种屏幕分辨率,这就要求在设计 UI 时, UI 的大小相对的,而这可以通过使用 dip sp 作为尺寸单位来实现。
UI 的尺寸单位一般选择用 dip dip destiny independent pixel (与密度无关的像素)的缩写, dip 一般写作 dp
字符尺寸的单位一般选用 sp sp scale independent pixel (与缩放无关的像素)的缩写。
使用 dip sp 的作为尺寸单位的好处就是,当屏幕分辨率发生变化时, UI 或字符的尺寸回自动放大或缩小。
 
 
盒子模型
Android 中,可以一个标准控件看作是一个盒子。按照盒子模型,控件可拆分为以下几个部分: 内容 (content) 、填充 (padding) 、边框 (border) 、边界 (margin) 。对于这种盒子,我们能做的是设置内容、内容四周的填充大小、四周边界大小。
控件一般有一个默认的边框大小,这个是我们所不能设置的。以下图的 TextView 为例, content 就是文字, padding 就是文字与边框的距离,蓝色边框的四周便是边界(这个边界宽看作无穷小),而边界就是这个 TextView 周围的固有空白(透明)部分。
Test_第1张图片
标准控件
Android 提供了不少精美的标准 UI ,下面介绍笔者到目前为止接触过的标准 UI 和一些值得特别注意的地方(待续)。
 
TextView
用于显示不可编辑的文本
为突出效果,这里吧 TextView 的背景设为蓝色。 TextView 不仅用于显示一行,文字,也可以用于显示多行文字:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:D9FA884A-C3E8-42F5-BFA8-354FC80F22DD.png
如果想控制字符与边框之间的距离,可以设置 TextView Padding 属性。将上图的 Padding 属性设为:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:E4B9E158-FC0D-44B7-A640-D4AE6F9D3ED3.png
则会有这样的效果
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:5EF9457C-F48F-446A-9229-F3669C971D7E.png 对应的
 
 
EditView
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:3F0958FE-BC6A-4110-9C34-67FA7C70F092.png
EditView 继承于 TextView ,用户可以使用它输入信息。这个控件的突出特点是,它已经把各种数据格式的校验方法封装好了。可以通过设置该控件的 input style 属性来控制该控件允许接受的数据格式,如
input style 属性值            说明
text                   EditView 能输入任意的字符
textPassword            密码格式,输入的字符将被点号代替
textNumber             只允许输入数字     
textEmailAddress        输入的字符串的格式必须为电子右键的格式
TextView input style 的类型很多,常用数据各式都有,这可让程序员轻松了 不少 (^_^)
 
ImageView
如果要显示图片,可以将 View background 设置为想要显示的图片。但这样做有个明显的局限:图片会被拉伸或缩放到恰好充满整个 View ,而且不管你怎么修改 View 的属性,图片总是恰好充满整个 View 。想要更好的控制图片的显示方式(位置和大小),应该使用 ImageView 。关于如何使用 ImageView 控制图片的显示,打算在另写一篇文章详细介绍,所以这里就不多讲了。
 
 
不同的标准控件之间的一些共性
大部分标准控件都可以设置背景,而作为背景的可以是颜色,也可以是图片。
从布局上看,可以将控件看作盒子,具体参见前文。
 
布局
什么是布局?
一个 UI 控件的布局就是确定它的位置和大小。位置和大小不是完全孤立的,在相对布局中,控件位置可以影响控件的大小。
 
使用 Android 为系统的机器的屏幕大小尺寸有很多种,但 Android 系统提供了的好几种良好的 UI 布局机制,这使得  Android 程序的 UI 设计具有很高的灵活性。你可以很容易使用这些 UI 布局机制设计出心目中的界面,并让界面自动适应种个分辨。
 
Android 程序界面的设计中有多种 UI 布局方式,最常用的是线性布局( LinearLayout )和相对布局 相对布局( RelativeLayout )。下面将重点介绍常用的相对布局( RelativeLayout )。
 
一般我们希望程序能够在分辨率不同的机器上都能使用,
 
如果同一个方向上只有一个控件或两个两个控件,使用线性布局,否则使用相对布局。
 
LinearLayout 
线性布局,这中布局方式跟网页设计中使用的流式布局很相似。
 
RelativeLayout
相对布局。线性布局能做到的,相对布局也能做到;而相对布局能做到的,线性布局不一定能做到。一个线性布局不能做到的典型事情:将一个控件覆盖在另一个控件之上。下图将一个 Button 放到一个 ImageView 的正中间,这是线性布局所不能做到的。
Test_第2张图片
上图的布局方式是:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:DB3646AB-F96C-4912-B0D4-2F3E4A1B0D57.png
imageView1 button1 放在一个相对布局之中,而 imageView button1 的位置布局设置是: Layout center in parent = true;
 
相对布局的原理是:一个控件的位置是根据其他控件的位置来确定的。比如上图中。若问 button1 在哪?则回答是 button1 relativeLayout1 的正中间。
注意控件的位置可能决定控件的大小,下面你将看到这一点;另外,一个控件位置的参照对象可以是同一个 RelativeLayout 之中(包括 RelativeLayout 自身)的其他任意一个控件对象。
 
相对布局能结局好另外一个线性布局所不能解决的问题:两边要挨着,中间要充满。
Test_第3张图片
上图中蓝色矩形中,“条码”要在最左边,而“选择”按钮和“扫描”按钮要在最右边,中间的 TextEdit 要充满剩余空间。并且如果手机屏幕的分辨率不同,这种摆放方式应该不变,而这是线性布局所不能实现的,只能使用使用相对布局: 说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:75C26CE8-EBC5-4469-B626-53CBCAA02A01.png
TextView1 RelataiveLayout2 的左边对齐:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:8CAB1E07-EFB2-478E-BD04-43A5969ED24A.png
 
barCode 位于 TextView01 的右边:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:AD0591DD-52B2-4997-9ECA-B29067F8223F.png
 
barCode 位于 shopChoseBtn 的左边:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:B0A9F94D-D432-4B14-9D94-AF23565C3FBD.png
 
shopScanBtn RelataiveLayout2 的右边对齐:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:84B02B39-FD5F-472A-9E1E-19C97F39E28C.png
 
shopChoseBtn 位于 shopScanBtn 的左边:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:A28C0376-D02F-4ABC-B31E-0F532D70DEAD.png
在这个例子中,另外值得注意是,  TextView01 的宽是由它的位置所确定的。
 
 
再举个例子来证明下相对布局的优越之处。现在,有一系列的信息需要放在圆角矩形框中显示,并且信息和各边框之间有一个固定的空白距离;各个信息的长度不同,假设最长的信息等于下图第三个圆角框中的信息,而最短的信息等于下图第二个圆角框中的信息。对应这种情况,该怎么处理呢?
Test_第4张图片
 
由于圆角矩形的大小变化不算太大,可以使用同一张大小适中的圆角矩形图片作为信息的边框,这样对于显示任何信息,作为背景的圆角矩形图片都不会放生太大的变形。
Test_第5张图片
 
因为显示信息的 TextView Layout Width 肯定要为 WRAP_CONTENT ,所以圆角矩形图片不能直接设为信息 TextView 的背景,否则 WRAP_CONTENT 的范围就是圆角矩形图片而不是信息。这样,只能在显示信息的 TextView 之后放一个显示圆角矩形图片的控件(这里选择了 ImageView )作为背景。控件要重叠在一起,所以只能用 RelativeLayout
Test_第6张图片
 
ImageView02 图片缩放方式:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:07DA48CF-DBA6-49C7-A983-8B1D3BAC9D5E.png
 
ImageView02 的布局方式:
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:1701B0C9-8EA9-4C59-AEBB-F9C1E0BED9EE.png
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:8C5AF4EA-9413-42F4-9729-C076B1D6F210.png
TextView02 的布局方式
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:67FF2900-0624-4F7A-B85F-E5F2094C3566.png
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:74F6FFF2-DA61-4C14-89B7-88A95DB26542.png
说明: MacOSX:Users:koupoo:Library:Application Support:QQ:Users:623822712:QQ:Temp.db:95BCE431-A34B-4278-B670-8E63A97C1489.png
 
 
流式布局VS相对布局
 
流式布局使用起来十分简单,因为下一个控件的位置总是在前一个控件的右边或下边 ,  这使得流式布局在控件位置的控制上显得十分的古板;想法,相对布局使用起来麻烦的多,你要自己参照其他控件来控制每个控件的位置,但正是这种麻烦,使得控件位置的布局上相当灵活(你将把控件放哪呢?)。
 
 
限于笔者水平有限,如果文中有不妥之处,敬请读者批评指正。联系邮箱: [email protected]

你可能感兴趣的:(Android)