组件布局

来源:互联网 发布:Vb参数是必选项 编辑:程序博客网 时间:2024/06/04 19:18
宽度、高度:
layout_width宽度
layout_hight高度
固定的值:“100dp”
填满父控件:marth_parent/fill_parent
根据自身的内容:wrap_content

margin边距:
1四个属性:上、下、左、右
android:layout_marginTop="值dp"
android:layout_marginbottom="值dp"
android:layout_marginleft="值dp"
android:layout_marginright="值dp"
系统默认为左上,如果改为右下。则需要使用android:grivaty=""属性。写在布局标签上。
如android:gravity="bottom|right"

weight介绍:
对于weight,必须确定fill_parent/marth-parent/wrap_content。如果父控件是wrap_content,则子控件对于fill_parent/marth-parent将按照wrap_content的标准进行管理设置,对于weight,其中占用的比例标准应该按照fill_parent/marth-parent标准进行设置。如果在
wrap_content中加weight,将会出现错误。weight是将父类控件剩余的部分进行比例划分。

dp单位和dip单位:

dp就是dip,device independent pixels(设备独立像素). dip与屏幕密度(density)有关,而屏幕密度又与具体的硬件有关。
QVGA屏(分辨率为:320px * 240px) density=120
HVGA屏(分辨率为:480px * 320px) density=160
WVGA屏(分辨率为:800px * 480px) density=240
apk的资源包中,当屏幕density=240时使用hdpi标签的资源
当屏幕density=120时,使用ldpi标签的资源
当屏幕density=160时,使用mdpi标签的资源
当屏幕density=240时,使用hdpi标签的资源
从 Android 2.2 开始增加了xhdpi分类,
当屏幕density=320时,使用xhdpi标签的资源
Android开发人员一般不考虑屏幕的分辨率,而是它的密度。Android应用开发者在定义布局的UI时,会以密度无关像素(DP)的方式表达布局的维度和位置,这样确保UI在不同密度的屏幕上得以正确显示。
Android Design [1] 里把主流设备的 dpi 归成了四个档次,120 dpi(low)、160 dpi(medium)、240 dpi(high)、320 dpi(xhigh).Android Developers关于dp的文档中px和dp的转换公式:px = dp * (dpi / 160),这里的dpi是归一化后dpi,可选的值只能是120、160、240、320,并非设备真实的dpi。
【切图注意】
从基准线设计的屏幕(记住基线布局设置在320*480)上获取了一个100*100像素的位图图标。将相同的100*100图标配置在lDPI屏幕,该图标会显得很大很模糊。同样地,将其配置在hDPI屏幕上,它会显得太小(由于设备的每英寸的点数比mDPI屏幕多)要调整不同的设备屏幕密度,我们需要在四种密度大小之间按照3:4:6:8缩放比例。使用这些比率,通过简单的计算,android创造四个不同的版本的位图,以供开发生产:
75*75对应低密度屏幕(如0.75); ---ldpi
100*100对应中等密度的屏幕(基准); ---mdpi
150*150对应高密度屏幕( 1.5); ---hdpi
200*200对应超高密度显示屏( 2.0)。 ---xdpi
现在有很多应用程序开发商为了降低安装包的大小,只使用一套hdpi资源或者一套xhdpi资源,而不提供mdpi资源或ldpi资源,希望在mdpi和ldpi设备上有系统完成缩放适应,虽然可行,但是我们不应忽视因为缩放带来的图像模糊、显示效果不佳的现象。
【扩展】
Android应用Icon大小在不同分辨率下定义:
对于Android平台来说,不同分辨率下Icon的大小设计有着不同的要求,对于目前主流的HDPI即WVGA级别来说,通常hdpi的应用icon大小为72x72,而标准的mdpi即hvga为48x48,QVGA使用了ldpi,图标为32x32,常见的Android图标大小设计规范如下表所示:
Launcher 和 Menu:36 x 36 px ,48 x 48 px ,72 x 72 px
Status Bar、Tab、Dialog和List View:
24 x 24 px ,32 x 32 px ,48 x 48 px
切图是3的倍数的px,能保证计算出来的dp始终是整数。

从UI设计师的角度理解:

px(像素)是我们UI设计师在PS里使用的(不解释),同时也是手机屏幕上所显示的(也不解释)

dp是开发写layout的时候使用的尺寸单位,sp是开发写layout时关于字体的字号单位,且dp与sp总为1:1关系

Android支持四种不同的dpi模式:ldpi mdpi hdpi xhdpi

一般地,手机分辨率与所运行的dpi模式是匹配的,例如hvga(320x480像素)的手机屏幕一般在3.5英寸左右,运行在mdpi模式下(也有例外,稍后解释)(这个是ROM控制的,app不能改变)。当运行在mdpi下时,1dp=1px:也就是说设计师在PS里定义一个item高48px,开发就会定义该item高48dp;Photoshop中14px大的字体,开发会定义为14sp。

对于一部wvga(480x800)手机(G7、N1、NS),一般是运行在hdpi模式下。当运行在hdpi模式下时,1dp=1.5px:也就是说设计师在PS里定义一个item高72px,开发就会定义该item高48dp;Photoshop中21px大的字体,开发会定义为14sp。

所以,当你的app需要适配多个dpi模式的时候(例如同时适配mdpi与hdpi),若你在wvga下做设计,你需要将你的各数值都为3的倍数,并在切图标注时将所有的数字除以3乘以2换算成dp,这样开发的同一套layout就能用在两个不同的dpi模式下,而不是写两套layout。

mdpi与hdpi是2:3的关系

mdpi与xhdpi是1:2的关系

ldpi与mdpi是3:4的关系


RelativeLayout:

layout_toleftof:

位于目标组件的左边,值为引用。比如:@+id/...

layout_toRightOf:

同上

layout_alignLeft:

当前组件的左边与目标组件的左边对齐。

layout_AlignLeft:

同上类似

layout_alignTop:

同上

layout_alignbottom:

同上

layout_alignBaseline:

当前组件的内容的底边与目标内容的底边对齐