日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

[转载]Android Layout标签之-viewStub,requestFocus,merge,include

發(fā)布時間:2023/12/4 Android 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转载]Android Layout标签之-viewStub,requestFocus,merge,include 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

定義Android Layout(XML)時,有四個比較特別的標(biāo)簽是非常重要的,其中有三個是與資源復(fù)用有關(guān),分別是<viewStub/>, <requestFocus />, <merge /> and<include />。可是以往我們所接觸的案例或者官方文檔的例子都沒有著重去介紹這些標(biāo)簽的重要性。

  • <viewStub??/>: 此標(biāo)簽可以使UI在特殊情況下,直觀效果類似于設(shè)置View的不可見性,但是其更大的(R)意義在于被這個標(biāo)簽所包裹的Views在默認(rèn)狀態(tài)下不會占用任何內(nèi)存空間。viewStub通過include從外部導(dǎo)入Views元素。
    • 用法:通過android:layout來指定所包含的內(nèi)容。默認(rèn)情況下,ViewStub所包含的標(biāo)簽都屬于visibility=GONE。viewStub通過方法inflate()來召喚系統(tǒng)加載其內(nèi)部的Views。 <ViewStub android:id="@+id/stub" android:inflatedId="@+id/subTree" android:layout="@layout/mySubTree" android:layout_width="120dip" android:layout_height="40dip" />
    • <include />:可以通過這個標(biāo)簽直接加載外部的xml到當(dāng)前結(jié)構(gòu)中,是復(fù)用UI資源的常用標(biāo)簽。
      • 用法:將需要復(fù)用xml文件路徑賦予include標(biāo)簽的Layout屬性。 <include android:id="@+id/cell1" layout="@layout/ar01" /> <include android:layout_width="fill_parent" layout="@layout/ar02" />
    • <requestFocus />: 標(biāo)簽用于指定屏幕內(nèi)的焦點View。
      • 用法: 將標(biāo)簽置于Views標(biāo)簽內(nèi)部?<!– Easy AdSenser V2.37 –><!– Post[count: 2] –> <EditText id="@+id/text"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_weight="0"android:paddingBottom="4"><requestFocus /> </EditText>
    • <merge />:

單獨將<merge />標(biāo)簽做個介紹,是因為它在優(yōu)化UI結(jié)構(gòu)時起到很重要的作用。目的是通過刪減多余或者額外的層級,從而優(yōu)化整個Android Layout的結(jié)構(gòu)。

將通過一個例子來了解這個標(biāo)簽實際所產(chǎn)生的作用,這樣可以更直觀的了解<merge/>的用法。

建立一個簡單的Layout,其中包含兩個Views元素:ImageView和TextView?默認(rèn)狀態(tài)下我們將這兩個元素放在FrameLayout中。其效果是在主視圖中全屏顯示一張圖片,之后將標(biāo)題顯示在圖片上,并位于視圖的下方。以下是xml代碼:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"><ImageViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:scaleType="center"android:src="@drawable/golden_gate" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="20dip"android:layout_gravity="center_horizontal|bottom"android:padding="12dip"android:background="#AA000000"android:textColor="#ffffffff"android:text="Golden Gate" /></FrameLayout>

應(yīng)用上邊的Layout運行的視圖為:

啟動 tools>?hierarchyviewer.bat工具查看當(dāng)前UI結(jié)構(gòu)視圖:

我們可以很明顯的看到由紅色線框所包含的結(jié)構(gòu)出現(xiàn)了兩個framelayout節(jié)點,很明顯這兩個完全意義相同的節(jié)點造成了資源浪費(這里可以提醒大家在開發(fā)工程中可以習(xí)慣性的通過hierarchyViewer查看當(dāng)前UI資源的分配情況),那么如何才能解決這種問題呢(就當(dāng)前例子是如何去掉多余的frameLayout節(jié)點)?這時候就要用到<merge />標(biāo)簽來處理類似的問題了。我們將上邊xml代碼中的framLayout替換成merge:

<!– Easy AdSenser V2.37 –><!– Post[count: 2] –>

<merge xmlns:android="http://schemas.android.com/apk/res/android"><ImageViewandroid:layout_width="fill_parent"android:layout_height="fill_parent"android:scaleType="center"android:src="@drawable/golden_gate" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="20dip"android:layout_gravity="center_horizontal|bottom"android:padding="12dip"android:background="#AA000000"android:textColor="#ffffffff"android:text="Golden Gate" /></merge>

運行程序后在Emulator中顯示的效果是一樣的,可是通過hierarchyviewer查看的UI結(jié)構(gòu)是有變化的,當(dāng)初多余的 FrameLayout節(jié)點被合并在一起了,或者可以理解為將merge標(biāo)簽中的子集直接加到Activity的FrameLayout跟節(jié)點下(這里需要提醒大家注意:所有的Activity視圖的根節(jié)點都是frameLayout)。如果你所創(chuàng)建的Layout并不是用framLayout作為根節(jié)點(而是應(yīng)用LinerLayout等定義root標(biāo)簽),就不能應(yīng)用上邊的例子通過merge來優(yōu)化UI結(jié)構(gòu)。

除了上邊的例子外,meger還有另外一個用法

當(dāng)應(yīng)用Include或者ViewStub標(biāo)簽從外部導(dǎo)入xml結(jié)構(gòu)時,可以將被導(dǎo)入的xml用merge作為根節(jié)點表示,這樣當(dāng)被嵌入父級結(jié)構(gòu)中后可以很好的將它所包含的子集融合到父級結(jié)構(gòu)中,而不會出現(xiàn)冗余的節(jié)點。

另外有兩點需要特別注意:

  • <merge />只可以作為xml layout的根節(jié)點。
  • 當(dāng)需要擴(kuò)充的xml layout本身是由merge作為根節(jié)點的話,需要將被導(dǎo)入的xml layout置于 viewGroup中,同時需要設(shè)置attachToRoot為True。(更多說明請參見inflate()文檔)

轉(zhuǎn)自:http://liangoogle.iteye.com/blog/1062639

總結(jié)

以上是生活随笔為你收集整理的[转载]Android Layout标签之-viewStub,requestFocus,merge,include的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。