2012-10-15 150 views
8

我有一個xml配置輸入pin碼:如何避免嵌套的重量?

<?xml version="1.0" encoding="utf-8"?> 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FF000000" 
    android:orientation="vertical" 
    android:weightSum="1" > 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_margin="5dp" 
    android:layout_weight="0.2" 
    android:background="@android:drawable/edit_text" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" > 

    <EditText 
     android:id="@+id/pinDisplay" 
     android:layout_width="0dip" 
     android:layout_height="fill_parent" 
     android:layout_weight="0.85" 
     android:background="@null" /> 

    <ImageButton 
     android:id="@+id/backspace" 
     style="@android:style/Widget.Button" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:layout_gravity="center_vertical" 
     android:layout_margin="3dp" 
     android:layout_weight="0.15" 
     android:gravity="center" 
     android:src="@android:drawable/ic_input_delete" /> 
</LinearLayout> 

<!-- Keypad section --> 

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="0dp" 
    android:layout_weight="0.8" 
    android:baselineAligned="false" 
    android:orientation="vertical" > 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0dp" 
     android:layout_marginLeft="5dip" 
     android:layout_marginRight="4dip" 
     android:layout_weight="1" 
     android:orientation="horizontal" > 

     <Button 
      android:id="@+id/one" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="1" 
      android:textAppearance="@android:attr/text" /> 

     <Button 
      android:id="@+id/two" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="2" /> 

     <Button 
      android:id="@+id/three" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="3" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0sp" 
     android:layout_marginLeft="5dip" 
     android:layout_marginRight="4dip" 
     android:layout_weight="1" 
     android:orientation="horizontal" > 

     <Button 
      android:id="@+id/four" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="4" /> 

     <Button 
      android:id="@+id/five" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="5" /> 

     <Button 
      android:id="@+id/six" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="6" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0sp" 
     android:layout_marginLeft="5dip" 
     android:layout_marginRight="4dip" 
     android:layout_weight="1" 
     android:orientation="horizontal" > 

     <Button 
      android:id="@+id/seven" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="7" /> 

     <Button 
      android:id="@+id/eight" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="8" /> 

     <Button 
      android:id="@+id/nine" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="9" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="0sp" 
     android:layout_marginBottom="10dip" 
     android:layout_marginLeft="5dip" 
     android:layout_marginRight="4dip" 
     android:layout_weight="1" 
     android:orientation="horizontal" > 

     <Button 
      android:id="@+id/ok" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:enabled="false" 
      android:text="OK" 
      android:textColor="#B8B8B8" /> 

     <Button 
      android:id="@+id/zero" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="0" /> 

     <Button 
      android:id="@+id/clear" 
      android:layout_width="0sp" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:text="Clear" /> 
    </LinearLayout> 
    </LinearLayout> 
</LinearLayout> 

佈局是好的,但我得到了很多關於嵌套權lint警告。

嵌套的權重是不好的性能

我真的不注意到佈局加載緩慢或任何東西。我能做些什麼來避免嵌套的重量?還是應該讓它保持原樣?

回答

7

您可以使用RelativeLayout來避免嵌套權重。

嵌套權重對性能不利,因爲測量次數會隨着每個嵌套權重呈指數增長。

10

通常,您應該嘗試使用RelativeLayout而不是嵌套許多LinearLayout。

documentation

注:雖然您可以嵌套另一個佈局 內的一個或多個佈局來acheive你的UI設計,你要努力保持你的佈局 層次儘可能淺。如果佈局的嵌套佈局減少了 (寬視圖層次比深層視圖 層次更好),則佈局繪製得更快。

但是當你需要重量時,像現在一樣,RelativeLayout對你無幫助;相反,我建議你的鍵盤使用TableLayout,以減少嵌套佈局的數量。