我有两个叫做btnBeginner和btnAdvanced的按钮
我使用layout_weight
属性将这两个按钮平分。但layout_weight
对性能不利
因此,我想更改现有代码 - 如下所示。
<LinearLayout
android:id="@+id/lLayoutBeginAdv"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/btnBeginner"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight=".5"
android:background="@color/color_exam_btn_hlight"
android:text="beginner"
android:textAllCaps="false"
android:textColor="@color/white"
android:textStyle="normal" />
<Button
android:id="@+id/btnAdvanced"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight=".5"
android:background="@color/color_exam_btn_normal"
android:text="advanced"
android:textAllCaps="false"
android:textColor="@color/white"
android:textStyle="normal" />
</LinearLayout>
请不要使用layout_weight
属性来帮助我这样做。
答案 0 :(得分:5)
编辑:PercentRelativeLayout在API级别26.1.0中已弃用。 请考虑使用ConstraintLayout和关联的布局。
嵌套权重对性能不利,因为:
布局权重需要测量窗口小部件两次。当一个 具有非零权重的LinearLayout嵌套在另一个内 LinearLayout具有非零权重,然后是测量次数 以指数方式增长。
因此,在您的情况下,重量不会产生性能问题。但是如果你想在不使用重量的情况下将布局分成两个相等的部分,你可以使用PercentRelativeLayout
示例:
android.support.percent.PercentRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/btnBeginner"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/color_exam_btn_hlight"
android:text="beginner"
android:textAllCaps="false"
android:textColor="@color/white"
android:textStyle="normal"
app:layout_heightPercent="50%"
app:layout_widthPercent="50%"
/>
<Button
android:id="@+id/btnAdvanced"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/color_exam_btn_normal"
android:text="advanced"
android:textAllCaps="false"
android:textColor="@color/white"
android:textStyle="normal"
app:layout_heightPercent="50%"
app:layout_widthPercent="50%"/>
</android.support.percent.PercentRelativeLayout>
访问this Github repo了解详情
答案 1 :(得分:2)
我将虚拟视图放在RelativeLayout的中心 然后在它的右边设置一个按钮,在它的左边设置另一个按钮。
像这样的东西
<RelativeLayout>
<!-- Dummy in the center -->
<View
android:id="@+id/dummy"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
/>
<!-- Left Button -->
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:toLeftOf="@id/dummy"
android:text="New Button"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
/>
<!-- Right Button -->
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:toRightOf="@id/dummy"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
/>
</RelativeLayout>
答案 2 :(得分:1)
您应该为“线性布局”中的所有按钮设置layout_width = "0dp"
。
作为 layout_weight ,取代 layout_width 。基本上,layout_width被忽略了。
所以基本上你的代码应该是:
<LinearLayout
android:id="@+id/lLayoutBeginAdv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="2">
<Button
android:id="@+id/btnBeginner"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
...../>
<Button
android:id="@+id/btnAdvanced"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
..... />
</LinearLayout>
如需更多参考,请加上以下链接: layout_width and layout_weight - performance
答案 3 :(得分:0)
如果您不想使用layout_weight,请使用Relative Layout`
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="New Button"
android:id="@+id/button2"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>`
答案 4 :(得分:0)
如果您希望使用约束布局将两个按钮分成一行,那么下面是适合您的示例。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context="com.com.schooldemo.example.MainActivity">
<Button
android:id="@+id/buttonA"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="A"
app:layout_constraintEnd_toStartOf="@+id/buttonD"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/buttonD"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="D"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_weight="1"
app:layout_constraintStart_toEndOf="@+id/buttonA" />
</android.support.constraint.ConstraintLayout>