android XML佈局和子View按比例佈局

首先按照程序的目錄結構大體分析:
  res/layout/ 這個目錄存放的就是佈局用的xml文件,通常默認爲main.xml
  res/values/ 這個目錄存放的是一堆常量的xml文件
  res/drawable/ 存放的是一些圖片什麼的,固然圖標也在這裏
  下面主要對layout下的xml文件作個介紹,順便也把佈局的方法總結一下:
  ·文件的開頭
  <?xml version="1.0" encoding="utf-8"?>
  這是在說明xml版本及字符編碼
  ·緊接着到了關鍵的部分:
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  </LinearLayout>
  其中開頭的"LinearLayout"是佈局的方式,能夠有不少種,最經常使用的應該就是Linear了,其餘的佈局方法等下在後面總結。
  接着android:layout_width(height)="wrap_content"是在設置這部分佈局的寬高,也能夠是絕對值,固然設置爲絕對值時要標上單位。
  ·在<LinearLayout ...>和</LinearLayout>就之間能夠添加控件了,好比要添加一個名字爲btn的Button控件,而且Button上顯示的文字是"Test!",能夠這樣寫:
  <Button id="@+id/btn"
  android:text="Test!"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"   />
  開頭id後面的就是控件名稱,在用於添加事件Listener時會用到,而下幾行的android:xxx就是設置控件的屬性了,這些屬性在Android的文檔中都有,不須要特別去記,通常現查就能夠了。
  ·有一點要說明的是,佈局方法能夠嵌套,有點像java中的Container,能夠很是方便的把界面「堆」出來。
  佈局方式的簡單說明:
  查了Android文檔發現佈局確實不少,只列出兩個我本身認爲較經常使用的:
  ·LinearLayout線性的佈局方式,要麼上下,要麼左右的添加控件,很經常使用;
  ·GridView中文翻譯過來是網格佈局,控件按照順序依次填到每一個格子裏就行了,出來的界面會很整齊,較經常使用;
  具體的幾個佈局以下:
  @ <1> LinearLayout(線性佈局)提供了控件水平垂直排列的模型,同時能夠經過設置子控件的weight佈局參數控制各個控件在佈局中的相對大小。水平(vertical)垂直(horizontal)
  fill-parent:佔滿整個屏幕,wrap-content:恰好適合控件內容的大小
  對齊方式gravity取值:
  top:不改變大小,位置置於容器的頂部
  bottom:不改變大小,位置置於容器的底部
  left:不改變大小,位置置於容器的左邊
  right:不改變大小,位置置於容器的右邊
  center_vertical:不改變大小,位置置於容器的縱向中央部分
  center_horizontal:不改變大小,位置置於容器的橫向中央部分
  center:不改變大小,位置置於容器的橫向和縱向的中央部分
  fill_vertical:可能的話,縱向延伸能夠填滿容器
  fiil_horizontal:可能的話,橫向延伸能夠填滿容器
  fiil:可能的話,縱向和橫向延伸填滿容器
  @<2> AbsoluteLayout(座標佈局)可讓子元素指定準確的x/y座標值,並顯示在屏幕上。(0, 0)爲左上角,當向下或向右移動時,座標值將變大。AbsoluteLayout沒有頁邊框,容許元素之間互相重疊(儘管不推薦)。咱們一般不推薦使用AbsoluteLayout,除非你有正當理由要使用它,由於它使界面代碼太過剛性,以致於在不一樣的設備上可能不能很好地工做。
  Android:layout_x/layout_y=」56px」肯定控件位置
  @<3> RelativeLayout(相對佈局)容許子元素指定他們相對於其它元素或父元素的位置(經過ID指定)。所以,你能夠以右對齊,或上下,或置於屏幕中央的形式來排列兩個元素。元素按順序排列,所以若是第一個元素在屏幕的中央,那麼相對於這個元素的其它元素將以屏幕中央的相對位置來排列。若是使用XML來指定這個layout,在你定義它以前,被關聯的元素必須定義。
  Android:layout_centerInparent, 將當前控件放置於起父控件的橫向和縱向的中央部分           Android:layout_centerHorizontal, 使當前控件置於父控件橫向的中央部分
  Android:layout_centerVertival, 使當前控件置於父控件縱向的中央部分
  Android:layout_alignParentLeft, 使當前控件的左端和父控件左端對齊
  Android:layout_alignParentRight, 使當前控件的右端和父控件右端對齊
  Android:layout_alignParentTop, 使當前控件的頂端和父控件頂端對齊
  Android:layout_alignParentBottom,使當前控件的底端和父控件底端對齊
  上述屬性只能設置Bool類型的值,「true」或「false」
  Android:layout_below/layout_above/ layout_toLeftOf/ layout_toRightOf =「@id/」使當前控件置於給出id的空間的下方/上方/左邊/右邊
  Android:layout_marginBottom/layout_marginLeft/layo ut_marginRight/layout_marginTop=」30px」使當前控件底部/左邊/右邊/頂部空出相應像素空間
  @<4> FrameLayout(單幀佈局)是最簡單的一個佈局對象。它被定製爲你屏幕上的一個空白備用區域,以後你能夠在其中填充一個單一對象— 好比,一張你要發佈的圖片。全部的子元素將會固定在屏幕的左上角;你不能爲FrameLayout中的一個子元素指定一個位置。後一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部份或所有擋住(除非後一個子元素是透明的)。
java

Android:src=http://blog.soso.com/qz.q/」@drawable/」屬性指定所需圖片的文件位置,用ImageView顯示圖片時,也應當用android:src指定要顯示的圖片
  @<5> TableLayout(表格佈局)以行列的形式管理子控件,每一行爲一個TableRow的對象,TableRow也能夠添加子控件
  android:collapseColumns=「n」隱藏TableLayout裏面的TableRow的列n
  android:stretchColumns=「n」 設置列n爲可延伸的列
  android:shrinkColumns=「n」 設置列n爲可收縮的列
Android:src=http://blog.soso.com/qz.q/」@drawable/」屬性指定所需圖片的文件位置,用ImageView顯示圖片時,也應當用android:src指定要顯示的圖片
android


--------------前一部分爲複製粘貼他人--------------------佈局

在android線性佈局中要實現其子控件按必定比例排列 須要用到weight屬性:編碼


spa

圖片中 是3個TextView加一個ImageView 其中比例是2:1:1:1翻譯

第一個TextView佔用了總寬度的2/5餘下的佔用了1/5,當TextView中的內容過多,而且高度設置爲:wrap_content時將會分多行顯示,而設置爲fill_parent時,則有部分字被隱藏。orm

要實現此佈局:是在全部View都包含在LinearLayout中,而且要將layaout_width設置爲fill_parent,oriantatioan設置爲horizontal,其子View的layout_width都設置爲0dip,讓後設置按所佔比例設置weight值。xml

代碼以下:對象

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_listview"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dip"
android:paddingBottom="10dip"
android:gravity="center"
>

<TextView android:id="@+id/name"
android:layout_gravity="center_vertical"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text=" Cannon"
android:drawableLeft="@drawable/music_icon"
android:layout_weight="2"
android:gravity="left"
android:paddingLeft="5dip"
/>
<TextView android:id="@+id/time"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="12:01"
android:layout_weight="1"
android:gravity="center"
/>
<ImageView android:id="@+id/difficult"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:src="@drawable/five_star"
android:layout_weight="1"
android:gravity="center"
/>
<TextView android:id="@+id/record"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="20000"
android:layout_weight="1"
android:gravity="center"
/>
</LinearLayout>
blog

若是須要設置爲垂直方向按比例分配,則改動相應的Height爲Odip。


首先按照程序的目錄結構大體分析:
  res/layout/ 這個目錄存放的就是佈局用的xml文件,通常默認爲main.xml
  res/values/ 這個目錄存放的是一堆常量的xml文件
  res/drawable/ 存放的是一些圖片什麼的,固然圖標也在這裏
  下面主要對layout下的xml文件作個介紹,順便也把佈局的方法總結一下:
  ·文件的開頭
  <?xml version="1.0" encoding="utf-8"?>
  這是在說明xml版本及字符編碼
  ·緊接着到了關鍵的部分:
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/ android"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content">
  </LinearLayout>
  其中開頭的"LinearLayout"是佈局的方式,能夠有不少種,最經常使用的應該就是Linear了,其餘的佈局方法等下在後面總結。
  接着android:layout_width(height)="wrap_content"是在設置這部分佈局的寬高,也能夠是絕對值,固然設置爲絕對值時要標上單位。
  ·在<LinearLayout ...>和</LinearLayout>就之間能夠添加控件了,好比要添加一個名字爲btn的Button控件,而且Button上顯示的文字是"Test!",能夠這樣寫:
  <Button id="@+id/btn"
  android:text="Test!"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"   />
  開頭id後面的就是控件名稱,在用於添加事件Listener時會用到,而下幾行的android:xxx就是設置控件的屬性了,這些屬性在Android的文檔中都有,不須要特別去記,通常現查就能夠了。
  ·有一點要說明的是,佈局方法能夠嵌套,有點像java中的Container,能夠很是方便的把界面「堆」出來。
  佈局方式的簡單說明:
  查了Android文檔發現佈局確實不少,只列出兩個我本身認爲較經常使用的:
  ·LinearLayout線性的佈局方式,要麼上下,要麼左右的添加控件,很經常使用;
  ·GridView中文翻譯過來是網格佈局,控件按照順序依次填到每一個格子裏就行了,出來的界面會很整齊,較經常使用;
  具體的幾個佈局以下:
  @ <1> LinearLayout(線性佈局)提供了控件水平垂直排列的模型,同時能夠經過設置子控件的weight佈局參數控制各個控件在佈局中的相對大小。水平(vertical)垂直(horizontal)
  fill-parent:佔滿整個屏幕,wrap-content:恰好適合控件內容的大小
  對齊方式gravity取值:
  top:不改變大小,位置置於容器的頂部
  bottom:不改變大小,位置置於容器的底部
  left:不改變大小,位置置於容器的左邊
  right:不改變大小,位置置於容器的右邊
  center_vertical:不改變大小,位置置於容器的縱向中央部分
  center_horizontal:不改變大小,位置置於容器的橫向中央部分
  center:不改變大小,位置置於容器的橫向和縱向的中央部分
  fill_vertical:可能的話,縱向延伸能夠填滿容器
  fiil_horizontal:可能的話,橫向延伸能夠填滿容器
  fiil:可能的話,縱向和橫向延伸填滿容器
  @<2> AbsoluteLayout(座標佈局)可讓子元素指定準確的x/y座標值,並顯示在屏幕上。(0, 0)爲左上角,當向下或向右移動時,座標值將變大。AbsoluteLayout沒有頁邊框,容許元素之間互相重疊(儘管不推薦)。咱們一般不推薦使用AbsoluteLayout,除非你有正當理由要使用它,由於它使界面代碼太過剛性,以致於在不一樣的設備上可能不能很好地工做。
  Android:layout_x/layout_y=」56px」肯定控件位置
  @<3> RelativeLayout(相對佈局)容許子元素指定他們相對於其它元素或父元素的位置(經過ID指定)。所以,你能夠以右對齊,或上下,或置於屏幕中央的形式來排列兩個元素。元素按順序排列,所以若是第一個元素在屏幕的中央,那麼相對於這個元素的其它元素將以屏幕中央的相對位置來排列。若是使用XML來指定這個layout,在你定義它以前,被關聯的元素必須定義。
  Android:layout_centerInparent, 將當前控件放置於起父控件的橫向和縱向的中央部分           Android:layout_centerHorizontal, 使當前控件置於父控件橫向的中央部分
  Android:layout_centerVertival, 使當前控件置於父控件縱向的中央部分
  Android:layout_alignParentLeft, 使當前控件的左端和父控件左端對齊
  Android:layout_alignParentRight, 使當前控件的右端和父控件右端對齊
  Android:layout_alignParentTop, 使當前控件的頂端和父控件頂端對齊
  Android:layout_alignParentBottom,使當前控件的底端和父控件底端對齊
  上述屬性只能設置Bool類型的值,「true」或「false」
  Android:layout_below/layout_above/ layout_toLeftOf/ layout_toRightOf =「@id/」使當前控件置於給出id的空間的下方/上方/左邊/右邊
  Android:layout_marginBottom/layout_marginLeft/layo ut_marginRight/layout_marginTop=」30px」使當前控件底部/左邊/右邊/頂部空出相應像素空間
  @<4> FrameLayout(單幀佈局)是最簡單的一個佈局對象。它被定製爲你屏幕上的一個空白備用區域,以後你能夠在其中填充一個單一對象— 好比,一張你要發佈的圖片。全部的子元素將會固定在屏幕的左上角;你不能爲FrameLayout中的一個子元素指定一個位置。後一個子元素將會直接在前一個子元素之上進行覆蓋填充,把它們部份或所有擋住(除非後一個子元素是透明的)。

Android:src=http://blog.soso.com/qz.q/」@drawable/」屬性指定所需圖片的文件位置,用ImageView顯示圖片時,也應當用android:src指定要顯示的圖片
  @<5> TableLayout(表格佈局)以行列的形式管理子控件,每一行爲一個TableRow的對象,TableRow也能夠添加子控件
  android:collapseColumns=「n」隱藏TableLayout裏面的TableRow的列n
  android:stretchColumns=「n」 設置列n爲可延伸的列
  android:shrinkColumns=「n」 設置列n爲可收縮的列
Android:src=http://blog.soso.com/qz.q/」@drawable/」屬性指定所需圖片的文件位置,用ImageView顯示圖片時,也應當用android:src指定要顯示的圖片


--------------前一部分爲複製粘貼他人--------------------

在android線性佈局中要實現其子控件按必定比例排列 須要用到weight屬性:



圖片中 是3個TextView加一個ImageView 其中比例是2:1:1:1

第一個TextView佔用了總寬度的2/5餘下的佔用了1/5,當TextView中的內容過多,而且高度設置爲:wrap_content時將會分多行顯示,而設置爲fill_parent時,則有部分字被隱藏。

要實現此佈局:是在全部View都包含在LinearLayout中,而且要將layaout_width設置爲fill_parent,oriantatioan設置爲horizontal,其子View的layout_width都設置爲0dip,讓後設置按所佔比例設置weight值。

代碼以下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_listview"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dip"
android:paddingBottom="10dip"
android:gravity="center"
>

<TextView android:id="@+id/name"
android:layout_gravity="center_vertical"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text=" Cannon"
android:drawableLeft="@drawable/music_icon"
android:layout_weight="2"
android:gravity="left"
android:paddingLeft="5dip"
/>
<TextView android:id="@+id/time"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="12:01"
android:layout_weight="1"
android:gravity="center"
/>
<ImageView android:id="@+id/difficult"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:src="@drawable/five_star"
android:layout_weight="1"
android:gravity="center"
/>
<TextView android:id="@+id/record"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:text="20000"
android:layout_weight="1"
android:gravity="center"
/>
</LinearLayout>

若是須要設置爲垂直方向按比例分配,則改動相應的Height爲Odip。

相關文章
相關標籤/搜索