Android 日常開發(fā)中烙肺,兩個非常實(shí)用的布局技巧

Android 布局容器纳猪、常用控件和屬性,相信每個開發(fā)者都能倒背如流桃笙,開發(fā)排版 layout 時也能適當(dāng)取舍氏堤。但是,本文中介紹的這兩個常見的設(shè)計場景怎栽,其特殊的實(shí)現(xiàn)技巧可能你真的不曾用過丽猬。

RelativeLayout 水平居中等分


設(shè)計場景:

看到這樣的效果,可能你會不假思索地選擇 LinearLayout 容器熏瞄,同時分配 children 的 weight 屬性脚祟。不錯,這樣實(shí)現(xiàn)確實(shí)很簡單强饮。但是由桌,通常界面上還有其他元素,父容器一般使用的是 RelativeLayout 邮丰,如果再選擇使用一層 LinearLayout 包裹這兩個 Button 的話,無疑會額外增加視圖層次(View Hierarchy)剪廉,加大性能渲染壓力。其實(shí)捌斧,大可不必這樣做,RelativeLayout 也能讓兩個 children 水平居中等分寬度泉沾。

實(shí)現(xiàn)方式如下:

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

    <Button
        android:id="@+id/world"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_alignTop="@+id/hello"
        android:layout_toRightOf="@+id/view"
        android:text="First" />

    <View
        android:id="@+id/view"
        android:layout_width="0dp"
        android:layout_height="1dp"
        android:layout_centerHorizontal="true" />

    <Button
        android:id="@+id/hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_toLeftOf="@+id/view"
        android:text="Second" />

</RelativeLayout>

ScrollView 內(nèi)容適配技巧


設(shè)計場景:

簡單說明一下捞蚂,這種界面跷究,或者說類似的界面很常見,中間內(nèi)容長度不固定俊马,或者說相同內(nèi)容在不同設(shè)備上屏幕占比不一致丁存,導(dǎo)致底部操作按鈕位置也不盡相同。比如柴我,這個界面的產(chǎn)品重點(diǎn)是希望用戶能夠讀完協(xié)議內(nèi)容柱嫌,然后再做出下一步操作屯换。也就是說,你不能做成這個樣子:

可以對比著前面那張圖看一下嘉抓,產(chǎn)品希望的實(shí)現(xiàn)效果是:當(dāng)屏幕空間足夠大(或者說中間內(nèi)容較少)時晕窑,操作按鈕顯示在屏幕底部;當(dāng)屏幕空間不足(或者說中間內(nèi)容較多)時杨赤,以內(nèi)容顯示為主,操作按鈕位于屏幕之外植捎,向上滾動方可進(jìn)入屏幕可見范圍,然后進(jìn)行下一步操作蚓峦。

理解需求之后济锄,我們再來看一下實(shí)現(xiàn)方式:

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

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

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:padding="8dp"
            android:text="用戶協(xié)議"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_marginLeft="16dp"
            android:layout_marginRight="16dp"
            android:layout_marginTop="8dp"
            android:background="@color/colorPrimary" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:padding="16dp"
            android:text="@string/content" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@android:drawable/bottom_bar"
            android:gravity="center_vertical">

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="同意" />

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="拒絕" />
        </LinearLayout>

    </LinearLayout>

</ScrollView>

注意兩個地方荐绝,第一個是設(shè)置 ScrollView 的 android:fillViewport="true" 屬性,保證內(nèi)容占據(jù)整個屏幕空間角虫;第二個地方是委造,中間部分戳鹅,也就是例子中的 TextView 巧妙運(yùn)用 android:layout_weight 屬性昏兆,實(shí)現(xiàn)高度上的自適應(yīng),保證后面的操作按鈕部分能夠按照我們期望的要求正確展示隶债。

好好領(lǐng)會一下跑筝,相信我們一定能夠有所收獲。并且你會發(fā)現(xiàn)赞警,實(shí)際開發(fā)過程中能夠運(yùn)用上述兩個布局技巧的地方會有很多虏两。當(dāng)然,讀完此文定罢,如果你還用過其他比較特別的技巧的話,不妨留言交流一下琼蚯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宁仔,隨后出現(xiàn)的幾起案子罚拟,更是在濱河造成了極大的恐慌完箩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件阻逮,死亡現(xiàn)場離奇詭異秩彤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瓜富,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門降盹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人价捧,你說我怎么就攤上這事涡戳。” “怎么了渔彰?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵恍涂,是天一觀的道長。 經(jīng)常有香客問我掌测,道長,這世上最難降的妖魔是什么汞斧? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任粘勒,我火速辦了婚禮,結(jié)果婚禮上庙睡,老公的妹妹穿的比我還像新娘。我一直安慰自己统台,他們只是感情好啡邑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贵扰,像睡著了一般流部。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上枝冀,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天宾茂,我揣著相機(jī)與錄音,去河邊找鬼跨晴。 笑死,一個胖子當(dāng)著我的面吹牛怀骤,可吹牛的內(nèi)容都是我干的焕妙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼痕届,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了锤窑?” 一聲冷哼從身側(cè)響起嚷炉,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎绘证,沒想到半個月后哗讥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡车酣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年索绪,在試婚紗的時候發(fā)現(xiàn)自己被綠了贫悄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡唤反,死狀恐怖鸭津,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情盏阶,我是刑警寧澤闻书,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站砰盐,受9級特大地震影響坑律,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一淘捡、第九天 我趴在偏房一處隱蔽的房頂上張望池摧。 院中可真熱鬧,春花似錦作彤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至骚露,卻和暖如春缚窿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背倦零。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工扫茅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人葫隙。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓停蕉,卻偏偏與公主長得像愕鼓,于是被迫代替她去往敵國和親慧起。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

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