【威哥說】當你們都在談論Android性能的時候,老是會習慣性的說怎麼才能寫出簡潔高效的代碼呢。每每老是忽略layout佈局文件,佈局緩慢的渲染速度對一個app的性能影響也是很大。充滿沒必要要的views和可讀性差的layout文件會讓你的app運行緩慢。一塊兒來看下寫出高效搞笑佈局有哪些技巧吧!android
【正文】 1.用TextView自己的屬性同時顯示圖片和文字。編程
一般須要在文本旁邊添加一張圖片,假設須要添加圖片在文字的上邊,如圖:
想必很多童鞋看到以後,首先想到的就是用一個LinerLayout或RelativeLayout來包含一個TextView和ImageView,最後須要用3個UI元素和大量的代碼。可是有一個更好更清晰的解決方案,那就是TextView的compound drawable。你只須要一個屬性就能夠搞定。 <TextView android:layout_width="「wrap_content」" android:layout_height="「wrap_content」" android:drawablePadding="「5dp」" android:drawableTop="「@drawable/cat」" android:gravity="「center_horizontal」" android:text="「@string/cat」" > </TextView> 用到的主要屬性:
drawableTop : 指定drawable放在文本的頂部; DrawablePadding : 指定文本和drawable直接padding;app
2.用LinearLayout自帶的分割線 分割線在app中常常會用到,LinearLayout有一個屬性能夠幫你添加分割線。以下圖:LinearLayout包含2個TextView和基於它們中間的分割線。
(1) Create divider shape(建立shape) 下面是一個簡單的shape divider.xml用來看成分割線ide
<?xml version="1.0" encoding="utf-8"?>工具
<shape xmlns:android="http://schemas.android.com/apk/res/android" > <size android:width="3dp" /> <solid android:color="#000" /> </shape>佈局
(2) Add shape to LinearLayout性能
<LinearLayout android:layout_width="match_parent" android:layout_height="40dp" android:divider="@drawable/divider" android:dividerPadding="5dp" android:orientation="horizontal" android:showDividers="middle" >3d
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.5" android:gravity="center" android:text="美好" android:textSize="16sp" /> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="0.5" android:gravity="center" android:text="生活" android:textSize="16sp" />
</LinearLayout>code
上面用到了3個xml屬性: Divider:用來定義一個drawable或color做爲分割線。 showDividers:指定分割線在哪裏顯示,它們能夠顯示在開始位置,中間,末尾或者選擇不顯示。 Divider_Padding:給divider添加padding。 3.使用<include/>和<merge/>標籤 重用佈局是一個保持app一致的好方法,這樣之後有改變的話只要改一個文件就能夠了,Android提供了include標籤幫你重用佈局。 例如你如今決定建立一個有一個圖片居中的Toolbar工具欄,而後你想要添加到每一個頁面中,下面是Toolbar效果: 下面是toolbar.xml代碼:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="50dp" android:background="#e5e5e5" android:orientation="horizontal" tools:context=".MainActivity" >xml
<TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="back" android:textSize="16sp" /> <ImageView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="4" android:gravity="center" android:src="@drawable/b" /> <TextView android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center" android:text="next" android:textSize="16sp" />
</LinearLayout>
你能夠複製粘貼這些代碼到每一個Activity,可是不要這麼作,在編程中有一個重要的規則:當你複製粘貼,那你就是在作錯誤的事。在這種狀況下你能夠用include標籤在多個界面重用這個佈局。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >
<include layout="@layout/toolbar"/>
</RelativeLayout>
用include標籤你能夠只用一行代碼在app的每一個頁面添加你的toolbar,任何改變都會自動更新到全部頁面。 同時使用ImageView和background屬性實現點擊效果 你應該同時使用它們,在不少狀況下你會想要給ImageView添加點擊效果,而後我看到不少人用LinearLayout來包裹一個ImageView來實現。添加另外一個view是不必的。下面的代碼可讓你作的更好:
<ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" android:background="?android:attr/selectableItemBackground" android:src="@drawable/a"/>
顯示圖片用」src」屬性,drawable selector 圖片點擊效果用」background」屬性實現,上面用的是android默認提供的selector,固然你也能夠換成你本身實現的。
【總結】 但願這些技巧能夠幫你寫出更好更簡單的佈局layout,可是不要把這些技巧當成是規則。總有一些比較複雜的佈局,是無法用這些佈局,那時候就須要經過增長不加的複雜性來解決問題。在這種狀況下在添加更多的view以前,能夠考慮自定義view試着找到更簡單的解決方法。要牢記在視圖層次添加一個view的代價是不可小噓滴,它會影響app的加載速度。