android 中常用的五種布局 - CSDN

2020-12-27 CSDN技術社區

本篇文章所提到的控制項指:控制項和布局

布局的繼承關係:LinearLayout,RelativeLayout,FrameLayout,AbsoluteLayout都是ViewGroup的子類,所以有些屬性可以有交集,應具體對待。

而TableLayout是LinearLayout的子類,因此大多數LinearLayout的屬性都可以用。

子類擁有父類的屬性。

一、LinearLayout(orientation)

線性布局是按照水平或垂直的順序將子元素(可以是控制項或布局)依次按照順序排列,每一個元素都位於前面一個元素之後,即控制項在xml中所寫的先後循序就是顯示時控制項的順序。

線性布局及子類特有的屬性:

權重:剩餘屏幕佔有的比例

一般情況:在那個方向上設權重,則將該方向的屬性(height或者width)設置為0dp

如果在該方向設wrap_content:權重值越大,佔得屏幕比例越多,但小不warp_contant

如果設match_parent:權重值越大,佔得屏幕比例越小,但大大不過match_parent

缺點:缺乏靈活性,不能任意指定位置。不過掌握好權重能彌補很多線性布局的缺點。

不適用場景:兩個空間之間有很大空隙的布局,雖然有layout_marginTop等類似屬性,卻不好控制具體位置,而且用layout_marginTop達到目的,也只是在特定解析度手機上適配,不能很好適配其他解析度。

二、RelativeLayout

按照子元素之間的相對位置關係完成布局的,作為Android系統五大布局中最靈活也是最常用的一種布局方式。

值得注意的是:相對布局的參照控制項必須在被參照控制項的後面,在編寫xml布局文件時注意。

相對布局特有的屬性:值是某個控制項和布局的id

android:layout_below 在某控制項的下方
android:layout_above 在某控制項的的上方
android:layout_toLeftOf 在某控制項的左邊
android:layout_toRightOf 在某控制項的右邊
android:layout_alignTop 本控制項的上邊緣和某控制項的的上邊緣對齊
android:layout_alignLeft 本控制項的左邊緣和某控制項的的左邊緣對齊
android:layout_alignBottom 本控制項的下邊緣和某控制項的的下邊緣對齊
android:layout_alignRight 本控制項的右邊緣和某控制項的的右邊緣對齊

相對布局剛好填補了線性布局的缺點,但是相對布局也並非沒有缺點。

缺點:每個空間都必須設置id,使用繁瑣,如果修改了某一個控制項則可能需要重新布局,操作不易。

註:某一個控制項可能同時依賴於多個控制項,一個控制項同時可能被多個控制項依賴。並非單一依賴。

三、FrameLayout:

所有東西依次都放在左上角,會重疊,這個布局比較簡單,也只能放一點比較簡單的東西。

特點:後添加進去的控制項將從左上角覆蓋先放進去的控制項

適用場景:在開發中常做容器使用,用於動態添加布局對象。

四、AbsoluteLayout:

這種布局方式也比較簡單,但是在屏幕旋轉時,往往會出問題,而且多個元素的時候,計算比較麻煩。

絕對布局中將所有的子元素通過設置android:layout_x 和 android:layout_y屬性,將子元素的坐標位置固定下來,即坐標(android:layout_x, android:layout_y) ,layout_x用來表示橫坐標,layout_y用來表示縱坐標。 屏幕左上角為坐標(0,0),橫嚮往右為正方,縱嚮往下為正方。實際應用中,這種布局用的比較少,因為Android終端一般機型比較多,各自的屏幕大小。解析度等可能都不一樣,如果用絕對布局,可能導致在有的終端上顯示不全等

值得注意:該布局的原點在左上角。

缺點:屏幕適配麻煩,容易出問題,在實際開發中不常用。

五、TableLayout:

表格布局,適用於多行多列的布局格式,每個TableLayout是由多個TableRow組成,一個TableRow就表示TableLayout中的每一行,這一行可以由多個子元素組成。實際上TableLayout和TableRow都是LineLayout線性布局的子類。但是TableRow的參數android:orientation屬性值固定為horizontal,且android:layout_width=MATCH_PARENT,android:layout_height=WRAP_CONTENT。所以TableRow實際是一個橫向的線性布局,且所以子元素寬度和高度一致。

值得注意的是:列和行下標是從0開始的

特殊屬性:collapseColumns:隱藏列,多個列之間逗號隔開

            StretchColumns:設置某個列是可伸展的。

            shrinkColumns :可收縮的

一下兩屬性不能自動提示,不知為何,個人覺得不建議使用該屬性。

android:layout_colum:設置控制項在具體的列

android:layout_span:設置控制項所跨越的列數。

 

使用場景:特別規範的展示數據或者選項區,除了特殊場景外,開發中一般不使用。

缺點:過於規範,不夠靈活,不能設計出不規則的界面

總結:每一個布局都有自己適合的方式,這五個布局元素可以相互嵌套應用,做出美觀的界面。每一個布局都有自己的使用場合,就像每個人一樣在生活中扮演者重要角色,或多或少都有作用。

注意:有些界面雖然某個布局能單獨完成,但是推薦使用布局嵌套。而且根布局推薦使用相對布局。

最常用的布局:FrameLayout做容器,而RelativeLayout和LinearLayout嵌套做布局。市面上的:三層式界面都是基於這樣做的,最上面是標題欄,中間是動態加載的布局對象,最下面是RadioGroup。父容器是FrameLayout。

學習建議:根據java的繼承關係去學習,從而形成知識框架。

相關焦點

  • android水平布局和垂直布局 - CSDN
    一、線性布局(LinearLayout)線性布局:線性布局是我們在開發中最常見的布局方式之一,線性布局可以分為水平線性布局和垂直線性布局這兩種布局方式線性布局的屬性(決定布局中元素的位置和布局):android:layout_gravity ( 是本元素相對於父元素的對齊方式 )android:gravity
  • android 排列 - CSDN
    Android布局是應用界面開發的重要一環,在Android中,共有五種布局方式,分別是:LinearLayout (線性布局),FrameLayout(框架布局),AbsoluteLayout(絕對布局),RelativeLayout(相對布局),TableLayout(表格布局)。
  • android 布局 覆蓋 - CSDN
    項目中listview中嵌套checkbox,將父控制項設置為android:descendantFocusability="blocksDescendants",這樣設置為的是:會覆蓋子類控制項而直接獲得焦點,即點擊listview的item區域即可選中checkbox。
  • android 復用 布局優化專題及常見問題 - CSDN
    在布局優化中,Androi的官方提到了這三種布局<include />、<merge />、<ViewStub />,並介紹了這三種布局各有的優勢,下面也是簡單說一下怎麼使用.
  • android布局詳解專題及常見問題 - CSDN
    <include android:id=」@+id/cell3 layout=」@layout/workspace_screen」 /></LinearLayout>  上面的代碼中的<include>標籤還使用了一個android:id屬性,實際上,該屬性指定的是workspace_screen.xml布局文件中的根節點的android
  • android 動態創建布局文件 - CSDN
    在應用程式開發時有時不同的狀態需要對應不同的布局文件。其實比較簡單,以橫屏與豎屏變換為例切換不同的布局文件。首先,創建一個項目,在Manifest文件中為MainActivity添加configChanges屬性如下:<span style="white-space:pre"> </span><activity android:name=".MyActivity" android:label="@string/app_name"
  • android 不同大小的屏幕專題及常見問題 - CSDN
    轉載請註明出處:http://blog.csdn.net/guolin_blog/article/details/8830286原文地址為:http://developer.android.com/training/multiscreen/screensizes.html
  • android通過代碼實現的多布局專題及常見問題 - CSDN
    Seekbar常規使用方式通過xml布局方式實現,但是由於我們的是sdk,不能有xml布局,所以SeekBar使用純代碼實現。但是這樣就遇到了很多問題。 首先是SeekBar設置setProgressDrawable問題。
  • Android 雜知識總結
    >放在FrameLayout父布局中,然後子布局中使用layout_gravity=」center」。在布局編輯器中是在圖片下面顯示的,但是在真機上是顯示在中央的。8.setResult要在finish之前調用這個是源碼規定的(即使在onDestroy方法中的super.onDestroy()方法前setResult也是不行的)。
  • 安卓免費學習的博客,github,CSDN,視頻教程,一網打盡!
    Android ButterKnife Zelezny:在Activity,Fragment,Adapter中選中xml自動生成ButterKnife註解。Android Code Generator:根據布局文件快速生成Activity,Fragment,Adapter,Menu。
  • android 自定義view大小 - CSDN
    --場景1-->android:layout_width="match_parent"android:layout_height="match_parent"那麼按照我們的期望,希望子View的尺寸要是300dp*300dp,如果子View的布局參數是<!
  • android絕對布局
    絕對布局由AbsoluteLayout代表。絕對布局就像java AWT編程中的空布局,就是Android不提供任何布局控制而是由開發人員自己通過X坐標、Y坐標來控制組件的位置。當使用AbsoluteLayout作為布局容器時,布局容器不再管理子組件的位置、大小---這些都需要開發人員自己控制。
  • Android一些你需要知道的布局優化技巧
    唯鹿的博客地址:http://blog.csdn.net/qq_17766199今天分享一些layout布局書寫中的一些技巧,希望看過之後你也一樣可以寫出性價比高的布局。我個人的目標是用最少的View寫出一樣效果的布局。因為我相信View的數量減少伴隨著的就是層級的減少。從而達到結構清晰,渲染速度快的效果。順著這個邏輯,我將優化分為重用、合併、按需載入。
  • Android基礎 - 如何做魯棒性更高的布局
    布局開發是APP前端開發中最重要的一環,而目前我們所做的大部分APP開發離不開一種模型,即盒子模型,字面意思理解,就是一個盒子套一個盒子,外邊的盒子位置的變動裡邊的小盒子也會跟著變,反映到布局上,即父布局和子布局,但是注意了,在Android提供的基礎組件中,有些組件可以構成所謂的「盒子」,而有些組件則不行,他們只能作為放在盒子內部拿來使用的存在。
  • android啟動頁設計專題及常見問題 - CSDN
    轉載請註明出處:http://blog.csdn.net/wangjihuanghun/article/details/63255144啟動頁幾乎成為了每個app的標配,有些商家在啟動頁中增加了開屏廣告以此帶來更多的收入。
  • 帶你了解 Android 約束布局 ConstraintLayout
    ConstraintLayout是Android新推出的一個布局,其性能更好,連官方的hello world都用ConstraintLayout來寫了。所以極力推薦使用ConstraintLayout來編寫布局。本文主要介紹一下如何使用代碼來編寫ConstraintLayout布局。好了,開始我們的徵程。
  • 精選Android中高級面試題 -- 終結篇:高級乾貨
    第二種組件之間的自定義類和自定義方法的調用要稍微複雜點,需要 ARouter 配合架構中的 公共服務(CommonService) 實現:提供服務的業務模塊:在公共服務(CommonService) 中聲明 Service 接口 (含有需要被調用的自定義方法), 然後在自己的模塊中實現這個 Service 接口, 再通過 ARouter API 暴露實現類。
  • bootstrap 寬度 自適應布局專題及常見問題 - CSDN
    一共5種: [1]float [2]inline-block [3]table [4]absolute [5]flex- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -思路一: float說起兩列布局
  • android 從後臺啟動頁面專題及常見問題 - CSDN
    這三個Tesseract語言包合起來約有70M左右,APK文件中拷貝語言包到手機存儲中需要幾秒時間,所以我們做了一個啟動頁面,在為用戶展示App第一印象的同時,後臺拷貝這三個語言包。經過比較,知乎日報的啟動頁面有從中心點展開逼進用戶的效果,我們決定利用此效果來設計啟動頁面。最終效果如圖所示:
  • android中的啟動模式 - CSDN
    Android總Activity的啟動模式分為四種: Activity啟動模式設置: <activity android:name=".MainActivity" android:launchMode="standard" />Activity的四種啟動模式: 1. standard 模式啟動模式,