這里談到的簡(jiǎn)化布局不是教你如何使用<includ>
標(biāo)簽、<merge>
標(biāo)簽或者ViewStub
冯事,本篇介紹的是怎么利用<style>
標(biāo)簽減少布局文件的代碼行數(shù)惰帽。
android支持使用XML文件編寫(xiě)布局,我們甚至能只用標(biāo)簽屬性初始化控件就能達(dá)到UI妹子設(shè)計(jì)的頁(yè)面效果汛蝙。但是,我們?cè)跇?biāo)簽中定義了大量屬性會(huì)使xml文件看起來(lái)很臃腫,如果布局很復(fù)雜會(huì)很難看清布局的層級(jí)鹿驼。
想想一個(gè)布局文件就有400多行看起來(lái)會(huì)有多費(fèi)勁。舉個(gè)例子辕宏,一個(gè)表單頁(yè)面定義一個(gè)展示文本可能會(huì)寫(xiě)如下代碼:
<TextView
android:id="@+id/et_contact"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/tv_xxdz"
android:layout_marginLeft="@dimen/padding_margin_5"
android:layout_marginTop="29dp"
android:layout_toRightOf="@id/tv_llr"
android:textColor="@color/sub1_text_color"
android:textSize="14sp"/>
僅一個(gè)控件就有10行代碼畜晰,你可能在一屏里只能看到三個(gè)控件的代碼,不易閱讀瑞筐。下面我們抽出一些代碼試試凄鼻。
每個(gè)控件都有寬高屬性,我們可以在styles.xml中定義如下代碼:
<style name="WrapWrap">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
</style>
這個(gè)style名稱由兩個(gè)單詞組成聚假,第一個(gè)表示寬块蚌、第二個(gè)表示高。如果控件的寬高是不明確的膘格,我們也可以擴(kuò)展出下面的三個(gè)style:
<style name="MatchMatch">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">match_parent</item>
</style>
<style name="WrapMatch">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">match_parent</item>
</style>
<style name="MatchWrap">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
</style>
表單可能要顯示多個(gè)展示文本峭范,它們的風(fēng)格都是一樣的,我們可以再定義一個(gè)style:
<style name="PrintTitle" parent="WrapWrap">
<item name="android:textColor">@android:color/black</item>
<item name="android:textSize">@dimen/print_text</item>
<item name="android: layout_marginTop">29dp</item>
<item name="android: layout_marginLeft">5dp</item>
</style>
使用了上面的主題后之前的TextView看起來(lái)是這樣的:
<TextView
android:id="@+id/et_contact"
style="@style/PrintTitle"
android:layout_below="@id/tv_xxdz"
android:layout_toRightOf="@id/tv_llr"/>
代碼行數(shù)減少了一半有沒(méi)有瘪贱。
如果我們大量運(yùn)用這種方式虎敦,那么表單的一行可能是這樣子:
<LinearLayout
android:id="@+id/ll_actual_time"
style="@style/CreateOrderSubItem">
<TextView
style="@style/CreateOrderKey"
android:text="@string/actual_time" />
<TextView
android:id="@+id/tv_actual_time"
style="@style/CreateOrderValue" />
<ImageView style="@style/EnterArrow" />
</LinearLayout>
這樣的布局代碼看起來(lái)非常清晰,我的密集恐懼癥也很少犯了政敢。當(dāng)然其徙,這篇文章只是一個(gè)引子,怎么簡(jiǎn)約你的layout文件使更易閱讀需要你細(xì)細(xì)琢磨喷户。