LinearLayou(線性佈局佈局)html
一些重要的屬性:android
一 orientation(朝向) 該屬性值有兩種一種是垂直朝向(verticle),還有一個是水平朝向(horizontal)app
- <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(權重): ide
看下面一個例子: 該佈局填充整個屏幕,其中有三個字控件,分別佔據頭部,底部,中間佈局
在上一篇博客中咱們經過相對佈局也能夠實現(把高設置成0,height=0)spa
更多關於該屬性的細節能夠瀏覽http://hi.baidu.com/mendynew/item/39cd374192770bab60d7b915.net
- <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>
運行結果:
下面一個例子,全部子空間的都是相同的寬度.也是經過該屬性來實現的.xml
- <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>
下面看一個簡單表單的例子,htm
- <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="@android :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>
在上一篇博客中經過相對佈局也能佈局出這樣的,可是從效率上說,相對佈局要好不少,效率要高.從這個例子上看線性佈局的層級要深.blog
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>
Java代碼:
- @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);
- }
以上設置的gravity是經過Java代碼設置的,也能夠經過xml配置
須要注意的是layout_gravity和gravity的區別,前者是該控件相對於父控件的重心(gravity),後者該控件的子空間的重心(gravity)