标签:
布局定义了视觉结构的用户界面,如活动或应用程序插件的用户界面。您可以通过两种方式申报的布局:每个布局文件必须包含一个根元素,它必须是一个View或ViewGroup中的对象。一旦你定义的根元素,你可以
添加额外的布局对象或部件作为子元素,逐步建立一个定义你的布局视图层次。例如,下面是一个使用一个垂直的LinearLayout保存一个TextView和一个Button的XML布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a Button" /> </LinearLayout>你宣布你的XML布局后,保存扩展名为.xml的文件,在你的Android项目的RES /布局/目录中,所以它会正确编译。
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); }在活动中的onCreate()回调方法由Android框架当你的活动启动(见有关生命周期的讨论中,活动文档中)调用。
android:id="@+id/my_button"该符号(@)在字符串的开头表明XML解析器解析应该和扩大ID字符串的其余部分,其标识为ID的资源。在加号(+)指这是必须被创建并添加到我们的资源(在R.java文件)的新的资源名。有一些由Android框架提供的其他ID资源。当引用一个Android资源ID,你不需要加符号,但必须添加Android包命名空间,就像这样:
android:id="@android:id/empty"有了Android包命名空间,我们现在引用从android.R资源类,而不是本地资源类的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);创建的RelativeLayout时定义为ID的视图对象是很重要的。在一个相对布局,同级次可以定义相对于另一个兄弟视图,这是由独特的ID引用它们的布局。
图1.可视化与每个视图相关布局参数视图层次的。
需要注意的是每个子类的LayoutParams都有自己用于设置值的语法。每个子元素必须定义适合于母公司的LayoutParams,尽管它也可以为自己的孩子定义不同的LayoutParams。
所有的视图组包括宽度和高度(layout_width和layout_height),并且每个视图要求来定义它们。许多的LayoutParams还包括可选的边距和边界。
你可以精确测量指定的宽度和高度,但你可能不希望经常这样做。更多的时候,你会使用这些常量来设置宽度或高度之一:
WRAP_CONTENT告诉您的视图大小本身其内容所需的尺寸。
match_parent(API级别前8名为FILL_PARENT)告诉你的看法变得一样大,它的父视图组将允许。
在一般情况下,不推荐指定使用绝对单位的布局的宽度和高度,例如像素。相反,使用相对测量,如密度无关的像素单元(DP),WRAP_CONTENT或match_parent,是一个更好的方法,因为它有助于确保您的应用程序将跨越多种设备屏幕尺寸的正确显示。接受的测量类型可用资源文件中定义。
布局位置
的图的几何形状是矩形的。视图具有一个位置,表示为一对左,顶部坐标和两个维度,表示为宽度和高度。为位置和尺寸的单位是像素。
有可能通过调用方法getLeft()和共达()以检索一个视图的位置。前者返回的左侧,或X代表视图的矩形的坐标。后者将返回前,或Y代表视图的矩形的坐标。这些方法都返回视图相的位置,它的父。例如,当getLeft()返回20,这意味着该视图位于20个像素到其直接父的左边缘的右边。
此外,还提供了几个方便的方法,以避免不必要的计算,即GetRight时()和getBottom()。这些方法返回表示视图的矩形的右边缘和下边缘的坐标。例如,主叫GetRight时()是类似于以下计算:getLeft()+的getWidth()。
大小,填充和利润
一个视图的大小被表示为宽度和高度。视图实际拥有2双宽度和高度的值。
第一对被称为测量宽度和测量高度。这些尺寸定义视图想有多大成为其父项内。所测量的尺寸可以通过调用getMeasuredWidth()和getMeasuredHeight()来获得。
第二对被简单地称为宽度和高度,或有时拉伸宽度和绘图高度。这些尺寸限定在屏幕视图的实际尺寸,在拉丝时间及布局之后。这些值可以,但不必,是从所测量的宽度和高度不同。的宽度和高度可以通过调用的getWidth()和getHeight()来获得。
为了测量它的尺寸,以便考虑到它的填充。填充在左,上,右和视图的底部部分像素表示。填充可以用于通过像素的具体数目,以抵消视图的内容。例如,为2的左填充将由2个像素推视图的内容到左边缘的右边。填充可以使用setPadding(INT,INT,INT,INT)方法调用getPaddingLeft(),getPaddingTop(),getPaddingRight()和getPaddingBottom()来设置和查询。
即使一个视图可以定义填充,它不提供边距任何支持。然而,视图组提供这样的支持。请参阅ViewGroup中和ViewGroup.MarginLayoutParams进一步的信息。
有关尺寸的详细信息,请参阅尺寸值。
常见的布局
在一个ViewGroup类的每个子类提供了在它显示你的意见鸟巢的独特方式。下面是一些内置到Android平台比较常见的布局类型。
注意:虽然您可以嵌套另一个布局中的一个或多个布局,以acheive你的UI设计,你应该努力保持你的布局层次尽可能浅。您的布局绘制速度更快,如果它有较少的嵌套布局(宽视图层次比深视图层次更好)。
该组织它的孩子到一个单一的水平或垂直行的布局。如果窗口的长度超过屏幕的长度它创建了一个滚动条。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myStringArray);对于这个构造函数的参数是:
ListView listView = (ListView) findViewById(R.id.listview); listView.setAdapter(adapter);要自定义您可以覆盖你的数组中的对象的toString()方法的每个项目的外观。或者,要为每个项目视图这是其他东西比一个TextView(例如,如果你想为每个阵列项目ImageView的),延长一个ArrayAdapter类并覆盖getView()返回你想为每个项目的类型来看。
String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER}; int[] toViews = {R.id.display_name, R.id.phone_number};当你实例化SimpleCursorAdapter,通过利用每个结果的布局,包含结果,而这两个数组的指针:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.person_name_and_number, cursor, fromColumns, toViews, 0); ListView listView = getListView(); listView.setAdapter(adapter);该SimpleCursorAdapter然后创建由列项各插入到对应的视图toViews使用提供的布局在游标各行的看法。
// Create a message handling object as an anonymous class. private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() { public void onItemClick(AdapterView parent, View v, int position, long id) { // Do something in response to the click } }; listView.setOnItemClickListener(mMessageClickedHandler);
标签:
原文地址:http://blog.csdn.net/qq_21413973/article/details/51168823