0

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

  1. 多行中的按钮。
  2. 按钮应填满整个屏幕尺寸,并且下方不留空白。

这已使用嵌套线性布局成功实现。但是,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>

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

截屏

4

1 回答 1

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 指出了线性布局中“嵌套权重”的低效率。

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

于 2013-02-23T10:31:49.313 回答