我正在开发一个计算器应用程序并希望:
使用嵌套线性布局已成功实现了这一点。但是,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>
这是使用嵌套线性布局实现的屏幕截图,我希望使用相对布局实现相同的效果。
答案 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指出'嵌套权重'的效率低下 在线性布局中。
考虑到这一点很好(你应该),但在你的情况下,应用程序可能很小/轻量级,因此嵌套权重不会对应用程序的性能产生如此大的影响。只是一个观点,不要仅仅为此而投票。