2012-10-15 106 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,以减少嵌套布局的数量。