閱讀280 返回首頁    go 阿裏雲 go 技術社區[雲棲]


關於Android中界麵XML文件的繪製順序

在開發Android程序的時候經常會遇到寫界麵XML文件的問題,其中感觸最深的就是一些控件顯示不出來或者顯示的位置不對。通過不斷地調試終於發現了一些原因,現在寫出來,希望可以幫到大家。

  之前我寫過一個很簡單的界麵:

<?xmlversion="1.0"encoding="utf-8" ?>
<LinearLayoutxmlns:andro
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
 <RelativeLayoutxmlns:andro
   android:layout_width="fill_parent"
  android:layout_height="fill_parent">
 <ListViewandroid:
 android:layout_height="wrap_content"
   android:layout_width="fill_parent"
   android:paddingTop="15dp"
   android:paddingBottom="15dp"
 android:layout_alignParentTop="true"  />
  <Buttonandroid:
   android:layout_width="fill_parent"
   android:layout_height="60dp"
   android:text="設置"
   android:gravity="center"
   android:textSize="15sp"
    android:layout_alignParentBottom="true"
    android:layout_below="@id/listview_mibTree"/>
  </RelativeLayout>
</LinearLayout>





  但是這樣的界麵如果ListView的內容太長的話,底部的按鈕就消失了。這是因為,係統在解析這個.XML文件的時候應該是順序解析順序繪製的一個過程,根據這個XML文件的邏輯,會先繪製ListView,之後在繪製底部的按鈕,言下之意就是先繪製ListView,如果ListView的內容過多,那麼勢必為需要向下滑動瀏覽,ListView自己的內容都展示不完,哪裏又還有位置留給底部的按鈕呢?
  所以正確的邏輯應該是:

<?xmlversion="1.0"encoding="utf-8"?>
<LinearLayoutxmlns:andro
   android:layout_width="fill_parent"
  android:layout_height="fill_parent"
    android:orientation="vertical">
   <RelativeLayoutxmlns:andro
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
        >
          <Button
           android:
           android:layout_width="fill_parent"
          android:layout_height="60dp"
            android:text="設置"
            android:gravity="center"
            android:textSize="15sp"
          android:layout_alignParentBottom="true"/>
       <ListView
           android:
          android:layout_height="wrap_content"
          android:layout_width="fill_parent"
            android:paddingTop="15dp"
          android:paddingBottom="15dp"
           android:layout_alignParentTop="true"
          android:layout_above="@id/btn_setInMain"
            ></ListView>
 
    </RelativeLayout>
 
</LinearLayout>





 

這時先解析的是按鈕控件,所以已經現將其繪製到了界麵的底部,這時就算ListView的內容再多,也不會影響Button的顯示。而且其中ListView有一行代碼:
android:layout_above="@id/btn_setInMain"
所以在編寫界麵的時候,隻要搞清楚了其繪製的順序,有很多問題就可以解決了。

表明ListView是繪製在Button之上的,所以該ListView不會把Button覆蓋掉。

最後的界麵:


所以隻要弄清楚了其繪製的順序,有的問題就容易解決了。

最後更新:2017-04-03 18:51:52

  上一篇:go 拿什麼拯救你,我的大規模殺傷性武器--Nokia!
  下一篇:go 下一代網絡:大道至“簡”