android布局(2)

1、一个元素XML元素的名字对应到一个Java类,因此一个<TextView>元素在你的UI中创建一个TextView,一个<linearLayout>元素
创建一个LinearLayout的视图组。当你加载一个布局资源时,Android系统初始化这些运行时对象,对应你的布局中的元素。XML
元素的属性对应到一个Java类的方法。

 

2、ID属性

每个View对象都有一个关联的ID,来唯一标识它。当应用程序被编译时,这个ID作为一个整数引用。但是ID通常是在布局XML文
件中作为字符串分配的,作为元素的id属性。这个XML属性对所有的View对象可用且会经常用到。XML中的ID语法如下:

android:id="@+id/my_button"

字符串前的@符号表示XML解析器应该解析和扩展剩下的ID字符串,并把它作为ID资源。+符号表示这是一个新的资源名字,它必须
被创建且加入到我们的资源(R.java文件,R是Resource)。Android框架提供一些其他的ID资源。当引用一个 Android资源ID时,
你不需要+符号,但是你必须添加android包名字空间,如下:

android:id="@android:id/empty"

为了创建视图和从应用程序引用他们,通常的模式是:

首先在布局文件中定义一个视图/构件对象并分配一个唯一的ID:
<Button android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
然后创建一个视图对象实例并从布局中获取它(典型的是在onCreate()方法中):
Button myButton = (Button) findViewById(R.id.my_button);

 

3、布局参数

名为layout_something的XML布局属性,为视图定义适合于它所驻留的ViewGroup的布局参数。每个ViewGroup类实现一个扩展自
ViewGroup.LayoutParams的嵌套类。这个子类包含为每个子视图定义大小和位置的属性类型,以适合于该视图组。如下图所示,
父视图组为每个子视图定义布局参数(包括子视图组)。


注意每个LayoutParams子类有它自己的设置值的语法。每个子元素必须定义适合于它父视图的LayoutParams,虽然它可能也为自己
的子视图定义不同LayoutParams。

所有的视图组包括宽带和高度(layout_width和layout_height),并且每个视图要求要定义它们。许多LayoutParams也包括可选的
边距和边界。你可以指定宽度和高度的具体值,虽然你可能并不想这样做。更多地你将告诉视图它的大小依据它内容要求或跟父视图
组所允许的一样大(分别用wrap_content和fill_parent值)。

 

4.布局位置&大小&补距&边距

视图的几何形状是一个矩形。视图的位置表示为一个left和top的坐标对,尺寸(dimensions)表示为宽度和高度。位置和尺寸的单位
是像素(pixel)。

可以通过调用getLeft()和getTop()检索视图的位置。前者返回视图矩形坐标的left或x,后者返回视图矩形坐标的right或y。这些方法
返回相对于与其父视图的相对位置,例如当getLeft()返回20,即认为视图到其直接父视图的左边距离为20像素。

此外,提供了一些额外的方法如getRight()和getButtom()避免不必要的计算。这些方法返回视图坐标的右边距和底边距。例如,调用
getRight()等同于下面的计算:getLeft()+getWidth()。

视图的大小(size)也表示为宽度和高度,但跟上面尺寸(dimensions)是区别的。上面的尺寸定义视图想在父视图中占多大,视图的
尺寸可以通过getMeasureWidth()和getMeasureHeight()获得。而视图的大小(size)则表示视图在屏幕上的实际大小,他们的值可以
跟视图尺寸的不一样,但也不是非得这样。视图的大小可以通过getWidth()和getHeight()获得。

为了估量视图的尺寸,必须考虑它的补距(padding,即视图内容与视图边框的距离)。补距以像素表示视图的left、top、right和
bottom部分的空白。补距可以用来按特定数量的像素偏移视图内容。例如,左补距是2将输出内容离左边框2像素。补距可以通过
setPadding(int, int, int, int)方法设置和通过getPaddingLeft()、getPaddingRight()、getPaddingTop()、getPaddingBottom()来查询
。虽然一个视图可以定义补距,但是它不支持边距(margins)。然而,视图组支持边距。

wrap_content与fill_parent的区别,其实区别从他们的单词组成就可以看出:wrap——包,包裹等而content——内容,则wrap_content表
示视图对象的高度/宽度正好包住内容;fill——填充等而parent——父,则fill_parent表示填满父视图。

 

 

NOTE:上述代码中布局位置&大小&补距的单位(如width="250dp")。单位可以为px、in、mm、pt、dp、sp。

px:pixels(像素)——对应屏幕上实际的像素
in:inches(英寸)——基于物理屏幕的大小
mm:millimeters(毫米)——基于物理屏幕的大小
pt:points(点)——英寸的1/72,基于基于物理屏幕的大小
dp:density-independent pixels(独立于密度的像素)——一个抽象的基于物理屏幕密度的单位。这些单位是相对于一个160dpi的屏幕
,所有一个dp是160dpi屏幕上的一个点。dp到px的转换比率根据屏幕密度改变,但不一定是成正比。
sp:scale-independent pixels(规模独立像素)——类似于dp单位,但是它也受用户字体大小设置的影响。当你指定字体大小时使用它,
因为他们将根据屏幕和用户设置调整。

posted on 2015-11-22 20:01  Day_to_Day  阅读(140)  评论(0编辑  收藏  举报

导航