Android应用程序用户界面(三)

来源:互联网 发布:七月七爱恋网络歌手 编辑:程序博客网 时间:2024/05/21 18:48

每个视图和视图组对象都具有属于它们的多种XML属性。某些属性只属于特定的视图对象(例如TextViewtextSize属性),但是继承自该视图类的任何视图对象也都拥有这些属性。一些属性所有视图对象都有,因为它们由根视图类(例如id属性)继承而来的。还有另外一些属性称为布局参数,它们是描述视图对象的某一个布局方向的属性,由对象的父视图组对象定义。

ID

任何视图对象可以有一个与它关联的整数ID,以唯一地从视图树中辨识出这个对象。当应用程序被编译后,这个ID被以整数形式引用。但是典型地,ID是在布局XML文件中按字符串的形式指定的。这是所有视图对象都有的(由视图类定义)一个XML属性,并且你会经常使用它。在一个XML标记中定义ID的语法如下:

android:id="@+id/my_button"

@符号指示XML解释器解析并展开ID字符串余下的内容并将其识别为一个ID资源。+符号意思是这是一个必须被创建的新的资源名字,并且添加到本地资源中(在R.java文件中)。Android框架提供了大量的ID资源。当引用一个Android资源ID时,你不需要+符号,但是必须添加android包命名空间,例如:

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

上例使用android包命名空间引用一个来自于android.R资源类而不是本地资源类中的ID

为了创建视图并且在应用程序中引用它们,一般的模式是这样的:

1.在布局文件中定义一个视图或部件,并为其指定一个唯一的ID

<Button android:id="@+id/my_button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:name="@string/my_button_text"/>

2.然后在代码中创建该视图对象的一个实例,并从布局中获取它(往往在onCreate()方法中)

Button myButton = (Button)findViewById(R.id.my_button);

在使用相对布局时,为视图对象定义ID也是非常重要的。兄弟视图可以通过引用另一个兄弟视图的ID来定义它们相对于该兄弟视图的布局。

ID并不需要在整个视图树中是唯一的,但是在你搜索的那部分树中应该是唯一的(但搜索范围通常就是整个树,因此如果可能的话最好让ID在整个树范围内是唯一的)。

布局参数

视图的名为layout_xxxXML布局属性定义了它相对于所在的视图组的布局参数。

每个视图组类实现了一个内部类,继承自ViewGroup.LayoutParams。这个子类包含属性类,为每个子视图定义了相对于其所在视图组的尺寸和位置。如你在下图中看到的,父视图组为每个子视图定义了布局参数(包括子视图组)。

布局参数

注意每个LayoutParams子类有它自己的设置值的语法。每个子元素必须定义相对于它父视图的布局参数,但是它也可能为它自己的子视图定义不同的布局参数。

所有的视图组包含一个宽度和高度(layout_widthlayout_height)属性,并且要求每一个视图都要定义它们。很多布局参数类也包括可选的页边距和边框。

你可以使用精确的度量单位来指定宽度和高度,但是你可能并不想经常使用它。更通常的是,你会使用以下常数来设置宽度或高度:

  • wrap_content。告诉你的视图调整自己到其内容需要的尺寸。
    -match_parent(在API 8之前称作fill_parent)。告诉你的视图变到它的父视图允许的最大值。

一般不建议使用绝对的单位例如像素指定布局的宽和高。相反,使用相对的测度例如密度无关的像素单位(dp)、wrap_contentmatch_content是更好的方法,因为它会帮助确保你的应用程序将会在各种屏幕大小的设备下正常地显示。

布局位置

视图在几何上是一个长方形。视图有一个位置,由一对坐标(左和顶)和两个尺寸(宽和高)表示。位置和尺寸的单位是像素。

可以getLeft()getTop()方法获取一个视图的位置。前者返回左坐标或者是代表视图的长方形的X坐标。后者返回顶坐标,或者代表视图的长方形的Y坐标。这些方法都返回的是视图相对于它的父视图的位置。例如,当getLeft()方法返回20时,意味着视图位于它的直接父视图的左边的边的右边20像素处。

另外,有几个方便的方法来避免不必要的计算,getRight()``和getBottom()方法。这些方法返回代表视图的长方形的右坐标和底坐标。例如getRight()方法和下面的计算相似:getLeft() + getWidth()

尺寸、填充和页边距

视图的尺寸由宽度和高度表示。视图实际占有两对宽度和高度值。

第一对称为标准宽度和标准高度。这些尺寸定义了视图想要在它的父视图中有多大。标准维度可以通过调用getMeasuredWidth()getMeasuredHeight()

第二对简单地被称为宽度和高度,或者有时成为绘制宽度和绘制高度。这些尺寸定义了视图绘制时刻屏幕中的实际尺寸。这些值可能不必和标准宽度和高度相同。可以通过getWidth()getHeight()方法获得宽度和高度。

为了测量它们的尺寸,视图实际考虑了它们的填充。填充以像素描述,包括视图的左、右、上和下部分。填充可以用来偏移视图的内容特定数目的像素。例如,左填充为2将把视图的内容向视图的左边界的右边推2个像素。填充可以使用setPadding(int,int,int,int)方法设置,通过getPaddingLeft()getPaddingTop()getPaddingRight()getPaddingBottom()方法获取。

尽管一个视图可以定义填充,但它不能够提供任何页边距的支持。然而,视图组提供了这样的支持。

原文

http://wear.techbrood.com/guide/topics/ui/declaring-layout.html#Position

0 0