Android視圖篇之一:Android常見基本布局


Android中,布局都是直接或間接的繼承自ViewGroup類,其中,ViewGroup的直接子類目前有:

AbsoluteLayout, AdapterView<T extends Adapter>, DrawerLayout, FragmentBreadCrumbs, FrameLayout, GridLayout, LinearLayout, PagerTitleStrip, RelativeLayout, SlidingDrawer, SlidingPaneLayout, ViewPager。

其中,DrawerLayout、PagerTitleStrip、SlidingPaneLayout和ViewPager 是Android API level 4(1.6版本)及其以后通過引入android.support.v4得以支持。GridLayout是Android API level 7(2.1版本)通過引入android.support.v7得以支持。SlidingDrawer在Android API level 17(4.2版本)廢棄。FragmentBreadCrumbs也較少用到。

同時,雖然TableLayout是繼承自LinearLayout,但TableLayout在日常開發中也經常用到,TableLayout也算在其中。因此,本文將主要講解Android中最常見的幾種布局方式:FrameLayout、LinearLayout、RelativeLayout、TableLayout和AbsoluteLayout。AdapterView<T extends Adapter>將在下一篇中詳細闡述。

1、FrameLayout

Framelayout是Android中最簡單的一種布局方式。其內部的view都是從屏幕左上角開始堆放,如果有多個view,后一個view的可見區域將遮擋前一個view相應區域。

可以簡單的理解成牆角堆放積木的效果。

若想達到不遮擋前一view,可以通過對view設置layout_gravity進行簡單定位

layout_gravity含義:此view相對於其父布局的對其方式。

2、LinearLayout

LinearLayout即線性布局,可以通過設定設定其android:orientation屬性值來確定是水平方向上的線性布局還是垂直方向上的線性布局。默認為水平方向的線性布局方式。

LinearLayout中的view有一個非常重要的屬性android:weight,表示在相應方向上剩余空間的比重,優先級高於view本身相應方向上的長度。以水平方向為例,如果設置了android:weight,則android:width屬性值建議設置成0dp,以取得更好的性能效果。對於兩個view而言,其中一個未設置android:weight屬性,則默認值為0,另一個設置了android:weight屬性值為1,由1/(1+0)=100%,其將占據此方向上全部的剩余空間。

同時,對於LinearLayout中的view,同樣可以使用android:layout_gravity屬性,但是,是有條件的。對於水平線性布局而言,android:layout_gravity在水平方向上失效;對於垂直線性布局而言,android:layout_gravity在垂直方向上失效。

 

3、RelativeLayout

RelativeLayout是Android中相對最靈活的一種布局方式。主要可以設置與父控件的對齊方式和相對於其他控件的對其方式。通過靈活設置不同的對齊屬性,可以達到復雜的布局效果,但前提是view需要具有相應的android:id="@+id/viewid"

 

4.TableLayout

TableLayout即表格布局。使用TableLayout時需要注意以下幾點

1). TbaleLayout類似於Html中的table,但是默認行列式沒有邊框的;

2). TableLayout是LinearLayout的子類,因為可以對其中的view使用android:weight屬性;

3). Tablelayout的children不一定是TableRow,也可以直接是其他的view。行列也不像html中的table那樣具有明顯的對其模式;

4). TableLayout中的children無需指定寬度,寬度默認都是match_parent。為其指定其他寬度值都是無效的;

5). TableLayout中的children如果為TableRow,則無需為其指定高度,高度默認都是wrap_content。為其指定其他高度都是無效的,若children為其他view,則可以指定其他寬度值;

6). TableLayout的屬性android:collapseColumns設置隱藏,但是只針對child為tablerow有效;

7). tablelayout的屬性android:stretchColumns設置可拉伸列,android:shrinkColumns 設置可收縮列,優先級都是大於weight屬性。

 

5、AbsoluteLayout

AbsoluteLayout即絕對布局(坐標布局),是相對於父控件的左上角開始的布局方式。通過給AbsoluteLayout中的view設置android:layout_x和android:layout_y屬性值來確定此view本身左上角的位置,以此完成定位。

AbsoluteLayout在Android API level 3(1.5版本)中已經被廢棄,由於此種布局方式不能較好的適配Android多種不同的屏幕效果,不推薦使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM