我想要实现的是拥有一个TextView,它占据了大约70%的屏幕,其余的30%被分成两个按钮并排设置(水平)。我实现这一目标的唯一方法是使用下面的代码...但是xml编辑器抱怨嵌套的权利......尽管它有效但我知道这不是一个好的做法...我应该怎么做呢?
<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" >
<TextView android:id="@+id/news"
android:textSize="14sp"
android:textStyle="bold"
android:textColor="#0033CC"
android:layout_height="0px"
android:layout_width="fill_parent"
android:layout_weight="70"
android:gravity="top"
/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0px"
android:orientation="horizontal"
android:layout_weight="30">
<Button
android:id="@+id/new_order_button"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/new_order"
/>
<Button
android:id="@+id/previous_orders_button"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/previous_orders"
/>
</LinearLayout >
编辑:更新的代码......警告仍然存在
谢谢:)
答案 0 :(得分:0)
实际上我觉得编辑抱怨说因为嵌套权重效率不高。布局权重需要两次测量窗口小部件,如果您有嵌套权重,则会以指数方式增加。
答案 1 :(得分:0)
您正在接收来自Lint的警告,因为计算嵌套权重很昂贵,并且必须在下一个图层之前计算最嵌套的部分。这会延迟将布局绘制到屏幕上,并且对性能不利。
您可以通过更改布局设计来解决这个问题。而不是让底部的Button
任意占据屏幕的30%,您可以让他们只需要layout_height
占用他们需要的wrap_content
,或者将它们设置为静态高度使用#dp
。然后,顶部的TextView
会占据屏幕顶部的其余部分。这对于Android来说更容易绘制,因为没有任何嵌套权重可供计算。您的棉绒警告应该消失:
<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" >
<TextView
android:id="@+id/news"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="top"
android:textColor="#0033CC"
android:textSize="14sp"
android:textStyle="bold" />
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:id="@+id/new_order_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="50"
android:text="@string/new_order" />
<Button
android:id="@+id/previous_orders_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="50"
android:text="@string/previous_orders" />
</LinearLayout>
答案 2 :(得分:0)
作为一种最佳实践,你不应该改变控件的大小(高度)(在这种情况下按钮)既不是绝对的也不是相对的 - android会为你制作它。在您的情况下,我只是创建一个FlowLayout作为根容器,然后将LinearLayout与两个按钮(每个产生50%的空间)放在底部。然后,TextView可以布局到LinearLayout的顶部,按钮占用剩余空间。但是,您仍然可以嵌套加权布局,但它对渲染性能来说不是最理想的。
答案 3 :(得分:0)
另一种可能性是在LinearLayout
内部使用TableRows
,然后将权重分配到TableRows
,如下所示:
<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" >
<TableRow
android:id="@+id/tableRow1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="70" >
<TextView
android:id="@+id/news"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="top"
android:textColor="#0033CC"
android:textSize="14sp"
android:textStyle="bold" />
</TableRow>
<TableRow
android:id="@+id/tableRow2"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="30" >
<Button
android:id="@+id/new_order_button"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button1" />
<Button
android:id="@+id/previous_orders_button"
android:layout_width="0px"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Button2" />
</TableRow>
</LinearLayout>