尝试在线性布局中解决嵌套权重问题(可能使用相对布局)

时间:2013-02-23 01:44:55

标签: android android-layout

我正在开发一个计算器应用程序并希望:

  1. 多行按钮。
  2. 按钮应填满整个屏幕尺寸,下方不留空白区域。
  3. 使用嵌套线性布局已成功实现了这一点。但是,android lint指出了线性布局中“嵌套权重”的低效率。请建议一种解决方法或使用相对布局实现相同的方法。

    以下是线性布局的示例。

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.5"
        android:orientation="horizontal">
    
        <Button
            android:id="@+id/button_7"
            android:layout_width="0dp"
            android:layout_weight="0.5"
            android:layout_height="match_parent"
            android:onClick="clickDigit"
            android:text="@string/button_7" />
    
        <Button
            android:id="@+id/button_8"
            android:layout_width="0dp"
            android:layout_weight="0.5"
            android:layout_height="match_parent"
            android:onClick="clickDigit"
            android:text="@string/button_8" />
    
    </LinearLayout>
    
     <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="0.5"
        android:orientation="horizontal">
    
         <Button
            android:id="@+id/button_dot"
            android:layout_width="0dp"
            android:layout_weight="0.5"
            android:layout_height="match_parent"
            android:onClick="clickDot"
            android:text="@string/button_dot" />
    
        <Button
            android:id="@+id/button_0"
            android:layout_width="0dp"
            android:layout_weight="0.5"
            android:layout_height="match_parent"
            android:onClick="clickDigit"
            android:text="@string/button_0" />
    
    </LinearLayout>
    

    这是使用嵌套线性布局实现的屏幕截图,我希望使用相对布局实现相同的效果。

    Screenshot

1 个答案:

答案 0 :(得分:2)

  

请建议一种解决方法或使用亲戚实现相同的方法   布局。

RelativeLayout的中间使用锚点视图,并在该锚点视图的每一侧的加权Buttons中放置两个LinearLayout。像这样:

<RelativeLayout>
    <View android:id="@+id/anchor" android:layout_centerHorizontal="true" />
    <!-- the C button part -->
    <Linearlayout android:id="@+id/firstRow" android:layout_alignParentRight="true" android:layout_toRightOf="@id/anchor">
          <View android:layout_weight="1" />
          <Button android:text="C" android:layout_weight="1" />  
    </LinearLayout>  

    <Linearlayout android:id="@+id/firstRowPart2" android:layout_alignParentRight="true" android:layout_toRightOf="@id/anchor" android:below="@id/firstRow">
         <Button android:text="3" android:layout_weight="1" />  
          <Button android:text="+" android:layout_weight="1" />  
    </LinearLayout>  


    <Linearlayout android:id="@+id/firstRowPart1" android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/anchor" android:below="@id/firstRow">
         <Button android:text="1" android:layout_weight="1" />  
          <Button android:text="2" android:layout_weight="1" />  
    </LinearLayout>  

    <!-- rest of the rows -->
</RelativeLayout>

正如您所看到的,这需要将布局深度增加一倍,并为布局添加其他视图,以便最终性能提升不会那么大。

更好的方法是使用TableLayout集来扩展所有列(在这种情况下,您只需要一些额外的TableRows,5更精确)。

更好的方法是创建自己的自定义布局,这样您就可以使用一个布局将Buttons放在网格中(并且应该很容易制作) (并且没有重量)。

  

然而,android lint指出'嵌套权重'的效率低下   在线性布局中。

考虑到这一点很好(你应该),但在你的情况下,应用程序可能很小/轻量级,因此嵌套权重不会对应用程序的性能产生如此大的影响。只是一个观点,不要仅仅为此而投票。