Android 佈局優化之include
在開發中UI佈局是我們都會遇到的問題,隨著UI越來越多,佈局的重複性、複雜度也會隨之增長。Android官方給了幾個優化的方法,但是網路上的資料基本上都是對官方資料的翻譯,這些資料都特別的簡單,經常會出現問題而不知其所以然。這篇文章就是對這些問題的更詳細的說明,也歡迎大家多留言交流。
一、include
首先用得最多的應該是include,按照官方的意思,include就是為了解決重複定義相同佈局的問題。例如你有五個介面,這五個介面的頂部都 有佈局一模一樣的一個返回按鈕和一個文字控制元件,在不使用include的情況下你在每個介面都需要重新在xml裡面寫同樣的返回按鈕和文字控制元件的頂部欄, 這樣的重複工作會相當的噁心。使用include標籤,我們只需要把這個會被多次使用的頂部欄獨立成一個xml檔案,然後在需要使用的地方通過 include標籤引入即可。其實就相當於C語言、C++中的include標頭檔案一樣,我們把一些常用的、底層的API封裝起來,然後複用,需要的時候 引入它即可,而不必每次都自己寫一遍。示例如下 :
my_title_layout.xml<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:id="@+id/my_title_parent_id"
android:layout_height="wrap_content" >
<ImageButton
android:id="@+id/back_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/title_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginLeft="20dp"
android:layout_toRightOf="@+id/back_btn"
android:gravity="center"
android:text="我的title"
android:textSize="18sp" />
</RelativeLayout>
include佈局檔案:<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<include
android:id="@+id/my_title_ly"
android:layout_width="match_parent"
android:layout_height="wrap_content"
layout="@layout/my_title_layout" />
<!-- 程式碼省略 -->
</LinearLayout>
這樣我們就可以使用my_title_layout了。注意事項
- 使用include最常見的問題就是findViewById查詢不到目標控制元件,這個問題出現的前提是在include時設定了id,而在 findViewById時卻用了被include進來的佈局的根元素id。例如上述例子中,include時設定了該佈局的id為 my_title_ly,而my_title_layout.xml中的根檢視的id為my_title_parent_id。此時如果通過 findViewById來找my_title_parent_id這個控制元件,然後再查詢my_title_parent_id下的子控制元件則會丟擲空指標。程式碼如下 :
View titleView = findViewById(R.id.my_title_parent_id) ;
// 此時 titleView 為空,找不到。此時空指標
TextView titleTextView = (TextView)titleView.findViewById(R.id.title_tv) ;
titleTextView.setText("new Title");
其正確的使用形式應該如下:
// 使用include時設定的id,即R.id.my_title_ly
View titleView = findViewById(R.id.my_title_ly) ;
// 通過titleView找子控制元件
TextView titleTextView = (TextView)titleView.findViewById(R.id.title_tv) ;
titleTextView.setText("new Title");
或者更簡單的直接查詢它的子控制元件:TextView titleTextView = (TextView)findViewById(R.id.title_tv) ;
titleTextView.setText("new Title");
相關文章
- Android佈局優化利器include和ViewStubAndroid優化View
- 佈局優化之ViewStub、Include、merge使用分析優化View
- Android優化之佈局優化Android優化
- Android佈局優化之ViewStub、include、merge使用與原始碼分析Android優化View原始碼
- Android效能優化之佈局優化Android優化
- Android 佈局優化Android優化
- Android 效能優化(二)之佈局優化面面觀Android優化
- Android學習之 UI佈局優化AndroidUI優化
- Android效能優——佈局優化Android優化
- Android佈局優化技巧Android優化
- Android 優化之路(一)佈局優化Android優化
- Android繪製優化(二)佈局優化Android優化
- Android佈局檢測優化Android優化
- Android中佈局的優化Android優化
- Android佈局優化三劍客Android優化
- 佈局優化優化
- 轉:Android佈局優化三劍客Android優化
- Android——ConstraintLayout的使用,優化佈局效能AndroidAI優化
- Android最佳效能實踐(4):佈局優化技巧Android優化
- Android之TableLayout(表格佈局)Android
- Android之佈局屬性Android
- Android GUI之View佈局AndroidGUIView
- iOS Flexbox 佈局優化iOSFlex優化
- 效能優化技巧知識梳理(1) 佈局優化優化
- Android開發之常用佈局Android
- Android入門教程 | UI佈局之RelativeLayout 相對佈局AndroidUI
- Android回顧--(十) ListView的優化和多佈局複用AndroidView優化
- Android入門教程 | UI佈局之LinearLayout 線性佈局AndroidUI
- Android 佈局Android
- 關於Android中xml佈局檔案之android 入門xml佈局檔案AndroidXML
- 姿勢擺好,一招學會android的佈局優化!Android優化
- 如何優化店鋪模板佈局——資訊圖優化
- Android系統修改之Notification佈局修改Android
- Android佈局概述Android
- Android xml 佈局AndroidXML
- Web效能優化系列:預防佈局抖動Web優化
- 三欄佈局之自適應佈局
- 移動佈局基礎之 流式佈局