【Android】27.0 UI開發(fā)(九)——Android五大布局

1.0 其實是6大布局谊路。主要是別人都寫的是五大布局传于,我不這么寫多不合群囱挑?
  • 之前寫到UI開發(fā)之八了,感興趣的可以找我的之前發(fā)的文章沼溜,這篇主要講解Android的布局之實用篇平挑。
  • 5大布局 一定要一起講!網(wǎng)上的文章大都沒有強(qiáng)調(diào)過這一點系草。在實際運用中通熄,各大布局往往隨著需互相嵌套,而且只要邏輯上(思路)沒什么問題找都,嵌套起來往往也會是推論中的效果唇辨。
  • 總之,只要思想不滑坡能耻,辦法總比困難多赏枚。
1.1 Android Studio2.2以前的Android五大布局
  • 線性布局 LinearLayout
  • 相對布局 RelativeLayout
  • 幀布局 FrameLayout
  • 表格布局 TableLayout(很少有人用)
  • 絕對布局 AbsoluteLayout(這個玩意基本沒人用)

現(xiàn)在我們?nèi)ナ忻嫔腺I的Android學(xué)習(xí)的參考書,也就止步于上面的內(nèi)容晓猛,但是6龇!戒职!

1.2 Android Studio2.2及其以后的Android studio版本增加了一個布局:
  • 約束布局 ConstarintLayout
    這個在我的一篇文章里面已經(jīng)講解了栗恩,具體用法也在里面,現(xiàn)在自己寫布局基本上也就是用的這個布局洪燥,主要是用起來特別方便磕秤。
  • 布局可以相互嵌套,需要用比如線性布局LinearLayout的時候蚓曼,大不了嵌套在里面得了亲澡。
    鏈接在此: 【Android】10.0 UI開發(fā)(一)——如何編寫程序界面钦扭、常見控件的使用
  • 不要擔(dān)心 約束布局 ConstarintLayout是新技術(shù)怕Android低版本不兼容纫版,它一直向下兼容到Android 2.2
  • 所以我們還是可以叫五大布局(絕對布局沒啥用客情,而且Android studio2.x版本之后把絕對布局 AbsoluteLayout給刪了……其弊,當(dāng)然癞己,我們所說的刪的意思是過時
    2019-03-19_075248.png

    palette列表都不提供絕對布局AbsoluteLayout:
2019-03-19_075407.png
  • 新建一個項目,命名為LayoutTest梭伐,目錄如下:
    2019-03-19_111910.png
2.0 相對布局 RelativeLayout
2.1 為什么先從相對布局講起痹雅?

因為別人都是從 線性布局 LinearLayout 講起的……
首先需要普及兩個用法却嗡,怕作為帶路黨不敬業(yè)假残,特意錄制好小視頻放上來。

2.2 谷歌攻城獅的意思腋舌,就是鼓勵大家用Android studio的圖形化開發(fā)界面赂苗,不必像以前那樣盯著源代碼翻翻找找愉耙。(當(dāng)然,如果你看不懂xml布局文件的源代碼拌滋,等著崩潰吧朴沿,總有bug等著你)

先放五個控件上來,沒錯败砂,一般的控件就這么放置就行了赌渣。(而且還可以ctrl+cctrl+v,在Design界面復(fù)制粘貼控件)

001.gif

接下來打開我們的好伙伴們:
002.gif

  • 2.21 Component Tree 當(dāng)前的控件層次(翻譯成中文叫組件樹)

  • 2.22 Attributes 翻譯:屬性昌犹,關(guān)于某個控件的一切都可以在這里圖形化操作坚芜。

    • 這里還設(shè)置了它一個設(shè)置Docked Mode(停靠模式)斜姥,基本上Android studio類似于Attributes 這樣的組成部分货岭,設(shè)置里面都有這個屬性,意思是固定在墻邊疾渴。Android studio 3.x版本之前的版本用的英文單詞是Properties(性質(zhì))千贯,并不是現(xiàn)在的Attributes,不過位置還是在那個位置搞坝。
    • 類似于tab鍵上面的雙箭頭搔谴,就是屬性的簡詳切換,看不懂意思的可以嘗試放棄走程序員這條路桩撮。
      -2.23 Preview 翻譯:預(yù)覽敦第。進(jìn)入text編輯界面,里面右側(cè)有個這個店量,方便在源代碼編輯芜果、調(diào)試的時候,實時預(yù)覽融师。
      2019-03-19_050543.png
2.3 為了方便預(yù)覽右钾,我們把idtext設(shè)置一下:

2019-03-19_051333.png

注意:我這里沒有去源代碼添加代碼,也沒有去控件選擇具體某個控件,僅僅通過上圖步驟123來操作舀射,效果簡潔明了窘茁。
2019-03-19_051349.png

當(dāng)修改完內(nèi)容后,脫離修改位置脆烟,視圖就會自動實時更新山林。

2.4 調(diào)整組件大小,首先為了方便編輯邢羔,我們把組件樹的button控件變成上右下左中:
003.gif

然后把橫的鋪滿橫的驼抹,豎的鋪滿豎的:


2019-03-19_052316.png

2019-03-19_053418.png

按照上圖的步驟123,把上下左右4個控件這樣設(shè)置一下拜鹤,最后是這樣的效果:


2019-03-19_053324.png
2.5 我們讓它鋪滿:
2019-03-19_053638.png

為了不遮擋控件砂蔽,用的左控件做例子,我們把鼠標(biāo)挪過去署惯,會發(fā)現(xiàn)出現(xiàn)小圓圈變紅色左驾,并停留一段時間會有信息提示(刪除對xx邊的約束),單擊后极谊,就會取消當(dāng)前的約束诡右。依樣畫葫蘆把上下左右4個控件這樣設(shè)置一下,最后是這樣的效果:

2019-03-19_053814.png

在右側(cè)的純藍(lán)色的布局約束預(yù)覽界面轻猖,可以看出組件有重疊帆吻,疊放層次完全取決于標(biāo)注1組件樹所示的層次。

2.6 讓控件靠著四邊咙边,并不再重疊猜煮。
  • 2.61 首先解決靠邊的問題。
    主要是屬性 layout_align系列在起作用败许,這個系列的勢力龐大:
    2019-03-19_083445.png

但一旦使用一般最多用其中4種王带,具體意義和它的名字沒什么區(qū)別,懂了就是懂了:

android:layout_alignBaseline 本元素的文本與父元素文本對齊
android:layout_alignWithParentIfMissing 如果對應(yīng)的兄弟元素找不到的話就以父元素做參照物

android:layout_alignBottom 本元素的下邊緣和某元素的的下邊緣對齊
android:layout_alignEnd本元素與結(jié)束的父元素對齊
android:layout_alignLeft 本元素的左邊緣和某元素的的左邊緣對齊
android:layout_alignRight 本元素的右邊緣和某元素的的右邊緣對齊
android:layout_alignStart本元素與開始的父元素對齊
android:layout_alignEnd本元素與結(jié)束的父元素對齊

android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方

android:layout_toLeftOf 在某元素的左邊
android:layout_toRightOf 在某元素的右邊
android:layout_toStartOf本元素從某個元素開始
android:layout_toEndOf本元素在某個元素結(jié)束

android:layout_alignParentBottom 貼緊父元素的下邊緣
android:layout_alignParentEnd緊貼父元素結(jié)束位置結(jié)束
android:layout_alignParentLeft 貼緊父元素的左邊緣
android:layout_alignParentRight 貼緊父元素的右邊緣
android:layout_alignParentStart緊貼父元素結(jié)束位置開始
android:layout_alignParentTop 貼緊父元素的上邊緣
  • 2.62 把各個元素和父元素的約束取消:
    004.gif

    如果控件四邊中間的白色小圓點試圖拖動市殷,或者沒有約束的時候愕撰,會變成綠色,變成紅色純粹是為了告訴我們醋寝,可以刪掉這小圓點代表的約束條件搞挣。
  • 2.63 添加對父元素的貼邊約束:


    2019-03-19_061110.png

    找到上圖所示的屬性,點擊變成對勾就行了音羞。源代碼就會相應(yīng)地改變:


    2019-03-19_061307.png

    點擊上圖劃紅線的地方囱桨,查看控件所在的源代碼:
    2019-03-19_061417.png

    就這么簡單。

  • 2.64 把按鈕疊放空出來嗅绰,這時候可以看出來相對布局 RelativeLayout的缺點來了舍肠,首先你只能這個操作:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/buttontop"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="上" />

    <Button
        android:id="@+id/buttonright"
        android:layout_width="40dp"
        android:layout_height="match_parent"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="45dp"
        android:layout_marginBottom="45dp"
        android:text="右" />

    <Button
        android:id="@+id/buttonbuttom"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="0dp"
        android:text="下" />

    <Button
        android:id="@+id/buttonleft"
        android:layout_width="40dp"
        android:layout_height="match_parent"
        android:layout_alignParentStart="true"
        android:layout_marginTop="45dp"
        android:layout_marginBottom="45dp"
        android:text="左" />

    <Button
        android:id="@+id/buttoncenter"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_centerInParent="true"
        android:text="中" />
</RelativeLayout>

代碼很簡單搀继,比如說左:

android:layout_marginTop="45dp"
android:layout_marginBottom="45dp"

這兩行代碼把上下按鈕給空出來,這使得你不得不得去約束一個固定值的高度 android:layout_height="xxx dp"給上下按鈕(這里我并沒有設(shè)置)貌夕,不然很可能出現(xiàn)在其他手機(jī)上運行效果不一致(再一次覆蓋按鈕或者空隙太多,UI效果差)民镜,并且還要做平板電腦的顯示界面處理啡专,因為控件并不會跟隨屏幕大小,而等比例放大縮小制圈。

layout_margin系列屬性又是一個系列们童,可以百度其他人寫的文章看一眼就知道怎么回事了。

這里把中間加了一行代碼居中了:

    <Button
        android:id="@+id/buttoncenter"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_centerInParent="true"
        android:text="中" />

layout_center系列屬性有3個:

  • android:layout_centerInparent 相對于父元素完全居中
  • android:layout_centerHrizontal 水平居中
  • android:layout_centerVertical 垂直居中

目前顯示效果如下:


2019-03-19_081351.png
2.7 相對布局 RelativeLayout還能做的最后一個示范鲸鹦。
  • 2.71 把中按鈕復(fù)制成9份:

    2019-03-19_081532.png

    好吧慧库,我知道我bottom字母打錯了(控件id為buttonbottom,現(xiàn)在寫成了buttonbuttom
    然后修改下內(nèi)容和id:
    2019-03-19_081822.png

  • 2.72 這里面除了之前的第一個中按鈕馋嗜,變成了現(xiàn)在的5按鈕齐板,是居中之外,其他按鈕需要設(shè)置一下葛菇。
    我們做成九宮格的電話按鈕效果甘磨,就用2.16所講的屬性 layout_align系列,增加同級約束(達(dá)到效果的約束有好幾種眯停,看你怎么相互約束而已),先看代碼和效果:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">

   <Button
       android:id="@+id/buttontop"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentTop="true"
       android:text="上" />

   <Button
       android:id="@+id/buttonright"
       android:layout_width="40dp"
       android:layout_height="match_parent"
       android:layout_alignParentEnd="true"
       android:layout_marginTop="45dp"
       android:layout_marginBottom="45dp"
       android:text="右" />

   <Button
       android:id="@+id/buttonbottom"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:layout_alignParentBottom="true"
       android:layout_marginBottom="0dp"
       android:text="下" />

   <Button
       android:id="@+id/buttonleft"
       android:layout_width="40dp"
       android:layout_height="match_parent"
       android:layout_alignParentStart="true"
       android:layout_marginTop="45dp"
       android:layout_marginBottom="45dp"
       android:text="左" />

   <Button
       android:id="@+id/buttonnum1"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_toLeftOf="@id/buttonnum2"
       android:layout_alignTop="@id/buttonnum2"
       android:text="1" />

   <Button
       android:id="@+id/buttonnum2"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_above="@+id/buttonnum5"
       android:layout_alignStart="@id/buttonnum5"
       android:text="2" />

   <Button
       android:id="@+id/buttonnum3"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_alignTop="@id/buttonnum2"
       android:layout_toEndOf="@id/buttonnum2"
       android:text="3" />

   <Button
       android:id="@+id/buttonnum4"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_alignTop="@+id/buttonnum5"
       android:layout_toStartOf="@+id/buttonnum5"
       android:text="4" />

   <Button
       android:id="@+id/buttonnum5"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_centerInParent="true"
       android:text="5" />

   <Button
       android:id="@+id/buttonnum6"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_alignTop="@+id/buttonnum5"
       android:layout_toEndOf="@+id/buttonnum5"
       android:text="6" />

   <Button
       android:id="@+id/buttonnum7"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_below="@+id/buttonnum6"
       android:layout_toStartOf="@+id/buttonnum5"
       android:text="7" />

   <Button
       android:id="@+id/buttonnum8"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_below="@id/buttonnum5"
       android:layout_alignStart="@id/buttonnum5"
       android:text="8" />

   <Button
       android:id="@+id/buttonnum9"
       android:layout_width="50dp"
       android:layout_height="50dp"
       android:layout_toEndOf="@id/buttonnum8"
       android:layout_alignTop="@id/buttonnum8"
       android:text="9" />

</RelativeLayout>

2019-03-19_084641.png

我的約束思路是济舆,把5按鈕定格在屏幕中央,這樣無論什么手機(jī)莺债,無論屏幕多大滋觉,這9個鍵肯定在屏幕中間,然后2齐邦、4椎侠、6、8按鈕5按鈕對齊措拇,1肺蔚、3按鈕2按鈕對齊,7儡羔、9按鈕8按鈕對齊宣羊。
首先看2按鈕:
2019-03-19_085316.png

大家不要去看1、3按鈕汰蜘,因為已經(jīng)做好約束了仇冯,標(biāo)注1是代碼,標(biāo)注2*是效果族操,一目了然苛坚。
android:layout_above 在某元素的的上方

然后比被,我們要把2按鈕的左側(cè)和5按鈕的左側(cè)對齊:


2019-03-19_085627.png

2019-03-19_090315.png

這里用toxxxof格式的約束,發(fā)現(xiàn)是熱臉貼冷屁股型泼舱,貼到對方的left側(cè)

說句實話:
如果Left型和Start型(還有Right和End型)同時存在的話等缀,用起來其實沒什么區(qū)別,效果一模一樣娇昙。
不過Android studio會在Left型(Right型) 出現(xiàn)黃色覆蓋標(biāo)識尺迂,而Start型(End型)并不會,那意思不久就是建議用Start型(End型)唄冒掌。
如果是用圖形化拖拽自動生成左右約束的話噪裕,生成的也是是Start/End類型約束的源代碼。

2019-03-19_090441.png

align_left這樣的屬性明顯是同甘共苦型股毫,它會和對方元素同左同右的膳音。

于是,2按鈕的約束也就成了如下的代碼:

    <Button
        android:id="@+id/buttonnum2"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_above="@+id/buttonnum5"
        android:layout_alignStart="@id/buttonnum5"
        android:text="2" />

再分析下9按鈕铃诬,它得貼8按鈕的右屁股祭陷,不然和8按鈕左右對齊用同甘共苦型的話,兩人就左對齊了:

2019-03-19_091518.png

所以要這樣:
2019-03-19_091656.png

然后9按鈕8按鈕上下同生共死就行了:
2019-03-19_091814.png

這里看到趣席,是同上邊生死颗胡,那么同下邊呢?
2019-03-19_091954.png

可見吩坝,只要思想不滑坡毒姨,辦法總比困難多。
最終效果的源代碼就可以這樣了:
2019-03-19_092131.png

其他的按鈕大同小異钉寝,邏輯上能走通弧呐,就能約束好控件,具體用什么屬性 layout_align系列并沒有唯一(死板)的解決方案嵌纲。

3.0 線性布局 LinearLayout
3.1線性布局就講一個案例俘枫,首先我們在app/src/main/res/layout目錄下新建一個xml文件,文件名隨意逮走,我的叫linearlayout_activity鸠蚪,剛開始源代碼是這樣子:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

</LinearLayout>
3.2 復(fù)制2份LinearLayout布局組件,并設(shè)置相應(yīng)的權(quán)重(比重):
2019-03-19_093429.png

不過源代碼是這樣子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

    </LinearLayout>
</LinearLayout>

android:layout_weight="1" 權(quán)重的概念很簡單师溅,父元素里面目前就兩個權(quán)重控件茅信,而且加起來等于2,意思就是墓臭,這兩個控件對半分整個父元素蘸鲸,如果第LinearLayout組件 android:layout_weight="2",表示現(xiàn)在天下這份蛋糕窿锉,已經(jīng)變成3份酌摇,而我將占據(jù)其中的2份膝舅。

android:orientation="vertical" 表示LinearLayout組件里面的元素是上下一個個排列的。(horizontal左右一個個排列)

3.3 我們給每個子LinearLayout組件各增加3個button控件窑多,并改好名字:
2019-03-19_094737.png

空間之間之所以有空隙仍稀,是文字自帶的背景沒填滿的關(guān)系,可以給每個button控件增加一個背景顏色埂息,像這樣:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="horizontal">

        <Button
            android:id="@+id/hbutton1"
            android:layout_width="wrap_content"
            android:background="#FF0000"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="橫著1" />

        <Button
            android:id="@+id/hbutton2"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="#37FF00"
            android:layout_weight="1"
            android:text="橫著2" />

        <Button
            android:id="@+id/hbutton3"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:background="#0030FF"
            android:layout_weight="1"
            android:text="橫著3" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <Button
            android:id="@+id/vbutton1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#FF0000"
            android:layout_weight="1"
            android:text="豎著1" />

        <Button
            android:id="@+id/vbutton2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#37FF00"
            android:layout_weight="1"
            android:text="豎著2" />

        <Button
            android:id="@+id/vbutton3"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#0030FF"
            android:layout_weight="1"
            android:text="豎著3" />
    </LinearLayout>
</LinearLayout>
2019-03-19_095601.png
4.0 幀布局 FrameLayout
4.1幀布局經(jīng)常用在Android碎片活動里面技潘,比如做出微信(QQ)主界面的效果,可以在下面的底部標(biāo)題欄里面切換*“微信”耿芹、“通訊錄”崭篡、“發(fā)現(xiàn)”挪哄、“我”時吧秕,不需要新建活動就可以達(dá)到顯示內(nèi)容切換的效果。
  • FrameLayout是幾個布局中最簡單的一個布局迹炼,單純?nèi)绨准垺?/li>
4.2 這里也就舉一個案例砸彬,在app/src/main/res/layout新建一個xml文件,文件名隨意斯入,我的叫framelayout_activity砂碉,剛開始是這樣的:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

</FrameLayout>
4.3 我們拖4個TextView控件到里面,并改好名字:
2019-03-19_100904.png
4.4先把textview1控件鋪滿全屏刻两,并設(shè)置一個喜慶的大紅色:
2019-03-19_101008.png
4.5 把textview2控件居中一下(嚴(yán)謹(jǐn)來說增蹭,最好textview1控件也做居中處理,但是沒必要磅摹,都鋪滿了):
2019-03-19_103347.png

為了看出效果滋迈,這里通過步驟2把textview2控件變大一些,然后通過android:layout_gravity="center"設(shè)置控件居中户誓。
源代碼如下:

   <TextView
        android:id="@+id/textView2"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:text="TextView2" />

分別textview2控件饼灿、textview3控件、textview3控件設(shè)置一個背景顏色帝美,把textview3控件碍彭、textview3控件大小調(diào)整下,給同樣居中處理悼潭,源代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#ff0000"
        android:text="TextView1" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_gravity="center"
        android:background="#00ff00"
        android:text="TextView2" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="140dp"
        android:layout_height="140dp"
        android:layout_gravity="center"
        android:background="#0000ff"
        android:text="TextView3" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_gravity="center"
        android:background="#FFC4C4"
        android:text="TextView4" />

</FrameLayout>

效果如下:


2019-03-19_104221.png

幀布局本身的話庇忌,就這些,如果配合碎片活動舰褪,才會變得比較復(fù)雜(需要構(gòu)造適配器java類)
好吧漆枚,我居然沒寫碎片活動的文章……

5.0 表格布局TableLayout (絕對布局 AbsoluteLayout不做介紹和講解)

用這個的是真心少,所以也是舉一個例子介紹一下:

5.1抵知,在app/src/main/res/layout新建一個xml文件墙基,文件名隨意软族,我的叫framelayout_activity,剛開始是這樣的:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent">

</TableLayout>
  • Tablelayout類以行和列的形式對控件進(jìn)行管理残制,每一行為一個TableRow對象立砸,或一個View控件
  • 當(dāng)為TableRow對象時初茶,可在 Tablelayout下添加子控件颗祝,默認(rèn)情況下,每個子控件占據(jù)一列恼布。
  • 當(dāng)為View控件時螺戳,該View將獨占一行。
    TableLayout可設(shè)置的屬性包括全局屬性及單元格屬性折汞。
    • 全局屬性也即列屬性倔幼,有以下3個參數(shù):
      android:stretchColumns 設(shè)置可伸展的列。該列可以向行方向伸展爽待,最多可占據(jù)一整行损同。
      android:shrinkColumns 設(shè)置可收縮的列。當(dāng)該列子控件的內(nèi)容太多鸟款,已經(jīng)擠滿所在行膏燃,那么該子控件的內(nèi)容將往列方向顯示。
      android:collapseColumns設(shè)置要隱藏的列何什。
      例如:
      android:stretchColumns="0" 第0列可伸展
      android:shrinkColumns="1,2" 第1,2列皆可收縮
      android:collapseColumns="*" 隱藏所有行

    • 單元格屬性组哩,有以下2個參數(shù):
      android:layout_column 指定該單元格在第幾列顯示
      android:layout_span 指定該單元格占據(jù)的列數(shù)(未指定時,為1)
      例如:
      android:layout_column="1" 該控件顯示在第1列
      android:layout_span="2" 該控件占據(jù)2列

源代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:stretchColumns="0"
    android:shrinkColumns="1"
    android:collapseColumns="2">

    <TableRow android:id="@+id/tablerow1">

        <Button android:id="@+id/button1" android:text="該列可伸展" />

        <Button android:id="@+id/button2" android:text="該列可收縮" />

        <Button android:id="@+id/button3"  android:text="我被隱藏了" />
    </TableRow>

    <TableRow android:id="@+id/tablerow2">

        <TextView android:id="@+id/textview01" android:text="我向行方向伸展处渣,巴拉巴拉小魔仙伶贰,我可以很長    " />

        <TextView android:id="@+id/textview02" android:text="我向列方向收縮,兩份炒粉多放辣謝謝霍比,我可以很深" />
    </TableRow>
</TableLayout>

效果如下:


2019-03-19_111210.png

2019-03-19_111308.png

END

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幕袱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子悠瞬,更是在濱河造成了極大的恐慌们豌,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浅妆,死亡現(xiàn)場離奇詭異望迎,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)凌外,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門辩尊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人康辑,你說我怎么就攤上這事摄欲〗瘟粒” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵胸墙,是天一觀的道長我注。 經(jīng)常有香客問我,道長迟隅,這世上最難降的妖魔是什么但骨? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮智袭,結(jié)果婚禮上奔缠,老公的妹妹穿的比我還像新娘。我一直安慰自己吼野,他們只是感情好校哎,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箫锤,像睡著了一般贬蛙。 火紅的嫁衣襯著肌膚如雪雨女。 梳的紋絲不亂的頭發(fā)上谚攒,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音氛堕,去河邊找鬼馏臭。 笑死,一個胖子當(dāng)著我的面吹牛讼稚,可吹牛的內(nèi)容都是我干的括儒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼锐想,長吁一口氣:“原來是場噩夢啊……” “哼帮寻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起赠摇,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤固逗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后藕帜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體烫罩,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年洽故,在試婚紗的時候發(fā)現(xiàn)自己被綠了贝攒。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡时甚,死狀恐怖隘弊,靈堂內(nèi)的尸體忽然破棺而出哈踱,到底是詐尸還是另有隱情,我是刑警寧澤梨熙,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布嚣鄙,位于F島的核電站,受9級特大地震影響串结,放射性物質(zhì)發(fā)生泄漏哑子。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一肌割、第九天 我趴在偏房一處隱蔽的房頂上張望卧蜓。 院中可真熱鬧,春花似錦把敞、人聲如沸弥奸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽盛霎。三九已至,卻和暖如春耽装,著一層夾襖步出監(jiān)牢的瞬間愤炸,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工掉奄, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留规个,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓姓建,卻偏偏與公主長得像诞仓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子速兔,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容