Android布局Include的好处,Android布局之include文件的使用中的疑难杂症
前言
有個(gè)需求是在不同的布局文件中引入相同的一個(gè)頂部toolbar的布局文件,因此用到include。
我的toolbar文件是這樣的稱之為layout_toolbar。
***xml
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
android:theme="@style/AppTheme"
app:theme="@style/ThemeOverlay.AppCompat.ActionBar">
主布局文件的結(jié)構(gòu)是一個(gè)RelativeLayout,其內(nèi)部上面引入toolbar,toolbar下面是一個(gè)scrollView。
奇怪現(xiàn)象
這里有個(gè)奇怪現(xiàn)象,直接這樣預(yù)覽都無法預(yù)覽,scrollView中無法通過id應(yīng)用include的控件的。參考之前的一個(gè)一個(gè)項(xiàng)目(稱之為A,現(xiàn)在出問題的這個(gè)項(xiàng)目稱之為B),layout_below=”@id/toolbar”變成
layout_below=”@+id/toolbar”,加上了個(gè)加號(hào),從原理上來說,這是不應(yīng)該的,而且從運(yùn)行結(jié)果來看也不對(duì)。但是參考的那個(gè)項(xiàng)目用了加號(hào),成功編譯運(yùn)行。仔細(xì)檢查,發(fā)現(xiàn)可能是這兩個(gè)項(xiàng)目之間的依賴注入模塊不同(因?yàn)锽utterknife的注入運(yùn)行時(shí)報(bào)錯(cuò),找不到toolbar)。把B項(xiàng)目依賴注入從ButterKnife換成XUtil中自帶的依賴注入。一切ok。
但是我這樣的強(qiáng)迫癥患者不能就此罷休。
ScrollView android:layout_below=”@id/toolbar”不能加上加號(hào)就是不能,不能因?yàn)闀呵矣薪Y(jié)果了,就加上了。
分析
兩條結(jié)論
之前的需求應(yīng)該是在scrollView設(shè)置below include之下。我們可以給include一個(gè)id,作為scrollView的參考
1. include和其它組件標(biāo)簽(RelativeLayout、LinearLayout、TextView等)一樣,都可以使用layout屬性來設(shè)置布局文件的寬高和位置
鑒于此,有人將其看作一個(gè)類似于LinerLayout的布局,個(gè)人感覺是不正確的,include應(yīng)該只是表示插入,拼接。
但需要注意的是:必須要復(fù)寫android:layout_width和android:layout_height屬性才能使用其它屬性(比如:android:layout_grivity、android:layout_align…、android:id等),這樣可以避免include引用layout中的子組件屬性影響到include的布局效果。
2. include添加配置屬性,因?yàn)橹貙懥烁季值膶傩?#xff0c;b文件(主文件)下的根布局的layout就不起作用了。不僅僅如果include指定了id的話,就不能直接把它里面的控件當(dāng)成主xml中的控件來直接獲得了,必須先獲得這個(gè)xml布局文件,再通過布局文件findViewById來獲得其子控件。當(dāng)沒有指定id的時(shí)候,只能直接this. findViewById來獲得其子控件。至于原因,我們還是歸因于對(duì)include下的布局文件的調(diào)用機(jī)制。(親測)
結(jié)論
我們?cè)诔绦蛑行枰苯油ㄟ^id查找include布局文件中的組件,因此我們不能通過給include id讓scrollView參考的方式。
我們將整個(gè)include的布局在scrollView之上等效為,scrollView在include布局中的一個(gè)組件之下。
直接使用layout_below=”@id/toolbar”(上面說的“一個(gè)組件”),這種會(huì)出現(xiàn)
上面提到那個(gè)項(xiàng)目使用@+id/toolbar,ok。應(yīng)該是因?yàn)槲覀冞@里include中只有一個(gè)組件toolbar。就將@+id后面的名字給了include中的toolbar。
最佳實(shí)踐
在布局中使用include時(shí)候,在include中使用LInerLayout類似的布局嵌套一層,不要在include設(shè)置各種屬性,極容易出各種問題。
參考文章
總結(jié)
以上是生活随笔為你收集整理的Android布局Include的好处,Android布局之include文件的使用中的疑难杂症的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C语言指针,申请、释放内存,线程
- 下一篇: 基于物理的渲染-用真实的环境光照亮物体