LinearLayou(线性布局布局)
一些重要的属性:
一 orientation(朝向) 该属性值有两种一种是垂直朝向(verticle),还有一个是水平朝向(horizontal)
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:background="@drawable/blue"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
- <!-- view1 goes on top -->
- <TextView
- android:background="@drawable/box"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/linear_layout_1_top"/>
- <!-- view2 goes in the middle -->
- <TextView
- android:background="@drawable/box"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/linear_layout_1_middle"/>
- <!-- view3 goes on the bottom -->
- <TextView
- android:background="@drawable/box"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/linear_layout_1_bottom"/>
- </LinearLayout>
二 layout_weight(权重):
看下面一个例子: 该布局填充整个屏幕,其中有三个字控件,分别占据头部,底部,中间
在上一篇博客中我们通过相对布局也可以实现(把高设置成0,height=0)
更多关于该属性的细节可以浏览
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:background="@drawable/blue"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <!-- view1 goes on top -->
- <TextView
- android:background="@drawable/box"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/linear_layout_3_top"/>
- <!-- view2 goes in the middle -->
- <TextView
- android:background="@drawable/box"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_weight="1"
- android:text="@string/linear_layout_3_middle"/>
- <!-- view3 goes on the bottom -->
- <TextView
- android:background="@drawable/box"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/linear_layout_3_bottom"/>
- </LinearLayout>
下面一个例子,所有子空间的都是相同的宽度.也是通过该属性来实现的.
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="match_parent">
- <TextView
- android:background="@drawable/red"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"/>
- <TextView
- android:background="@drawable/green"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"/>
- <TextView
- android:background="@drawable/blue"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"/>
- <TextView
- android:background="@drawable/yellow"
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"/>
- </LinearLayout>
下面看一个简单表单的例子,
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:background="@drawable/blue"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:padding="10dip">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/linear_layout_5_instructions"/>
- <EditText
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background=" :drawable/editbox_background"/>
- <LinearLayout
- android:orientation="horizontal"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="right" >
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/linear_layout_5_cancel"/>
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginLeft="10dip"
- android:text="@string/linear_layout_5_ok" />
- </LinearLayout>
- </LinearLayout>
在上一篇博客中通过相对布局也能布局出这样的,但是从效率上说,相对布局要好很多,效率要高.从这个例子上看线性布局的层级要深.
weight属性还可以实现如下布局:
运行结果:
通过相对布局也是可以实现这样的布局,把button设置为android:layout_alignParentBottom ="true"
三 gravity(重心)
下面来看一个例子:
- <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:padding="30dip" >
- <LinearLayout
- android:id="@+id/layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="@drawable/blue"
- android:orientation="vertical"
- android:padding="30dip" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/box"
- android:text="@string/linear_layout_8_c" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/box"
- android:text="@string/linear_layout_8_b" />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/box"
- android:text="@string/linear_layout_8_c" />
- </LinearLayout>
- </FrameLayout>
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- super.onCreateOptionsMenu(menu);
- menu.add(0, VERTICAL_ID, 0, R.string.linear_layout_8_vertical);
- menu.add(0, HORIZONTAL_ID, 0, R.string.linear_layout_8_horizontal);
- menu.add(0, TOP_ID, 0, R.string.linear_layout_8_top);
- menu.add(0, MIDDLE_ID, 0, R.string.linear_layout_8_middle);
- menu.add(0, BOTTOM_ID, 0, R.string.linear_layout_8_bottom);
- menu.add(0, LEFT_ID, 0, R.string.linear_layout_8_left);
- menu.add(0, CENTER_ID, 0, R.string.linear_layout_8_center);
- menu.add(0, RIGHT_ID, 0, R.string.linear_layout_8_right);
- return true;
- }
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- switch (item.getItemId()) {
- case VERTICAL_ID:
- mLinearLayout.setOrientation(LinearLayout.VERTICAL);
- return true;
- case HORIZONTAL_ID:
- mLinearLayout.setOrientation(LinearLayout.HORIZONTAL);
- return true;
- case TOP_ID:
- mLinearLayout.setVerticalGravity(Gravity.TOP);
- return true;
- case MIDDLE_ID:
- mLinearLayout.setVerticalGravity(Gravity.CENTER_VERTICAL);
- return true;
- case BOTTOM_ID:
- mLinearLayout.setVerticalGravity(Gravity.BOTTOM);
- return true;
- case LEFT_ID:
- mLinearLayout.setHorizontalGravity(Gravity.LEFT);
- return true;
- case CENTER_ID:
- mLinearLayout.setHorizontalGravity(Gravity.CENTER_HORIZONTAL);
- return true;
- case RIGHT_ID:
- mLinearLayout.setHorizontalGravity(Gravity.RIGHT);
- return true;
- }
- return super.onOptionsItemSelected(item);
- }