如何为 Android 中的不同布局设置链中按钮的大小
How to set the size of buttons in a chain for different layouts in Android
我想在我的 Android ConstraintLayout 中添加 3 个按钮,使它们水平分布。我认为这可以通过使用链来完成。所以我用它们做了一个链,然后扩展了它们的视图(通过标记它们 --> 右键单击 --> 组织 --> 水平扩展)。然而,这只是为一个特定的设备扩展了它们。当切换到另一台设备时,按钮看起来不再正确。这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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:id="@+id/outerConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rigthInnerConstraintLayout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/outerConstraintLayout"
app:layout_constraintEnd_toEndOf="@+id/outerConstraintLayout"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/outerConstraintLayout"
app:layout_constraintTop_toTopOf="@+id/outerConstraintLayout"
app:layout_constraintVertical_bias="1.0">
<Button
android:id="@+id/button_1"
android:layout_width="425dp"
android:layout_height="@dimen/_30sdp"
android:text="Button 1"
app:layout_constraintEnd_toStartOf="@+id/button_2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_2"
android:layout_width="425dp"
android:layout_height="@dimen/_30sdp"
android:text="Button 2"
app:layout_constraintEnd_toStartOf="@+id/button_3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button_1"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_3"
android:layout_width="426dp"
android:layout_height="@dimen/_30sdp"
android:text="Button_3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button_2"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
对于我使用可缩放的高度,我使用可缩放的尺寸单位 (https://github.com/intuit/sdp),但对于按钮的宽度,dp 值由 Android Studio 分配(展开后)。我认为这是问题所在。这些 dp 值是硬编码的。这意味着在更改设备时,值仍然相同,这会导致外观不正确。我的问题是如何将 3 个按钮排列成链状(或其他),以便它们在任何设备上水平跨越整行?
这些 dp 值是硬编码的。这意味着当更改设备时,值仍然相同,导致外观不正确 - 这是正确的。
如何修复
如果您将按钮上的 android:layout_width="426dp"
替换为 android:layout_width="0dp"
。
您的按钮现在将取消约束,现在每个按钮都将占用 33.3%
屏幕宽度。
您可以通过将 app:layout_constraintWidth_percent="0.x"
添加到您的按钮来更改每个按钮的宽度(只有当您的视图也具有 android:layout_width="0dp"
时它才会起作用),现在您的按钮将占用 x屏幕宽度的百分比。
例子
连续放置 3 个按钮 但是 中心按钮将占据屏幕尺寸的 50%,您可以这样使用它:
<androidx.constraintlayout.widget.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:id="@+id/outerConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rigthInnerConstraintLayout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/outerConstraintLayout"
app:layout_constraintEnd_toEndOf="@+id/outerConstraintLayout"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/outerConstraintLayout"
app:layout_constraintTop_toTopOf="@+id/outerConstraintLayout"
app:layout_constraintVertical_bias="1.0">
<Button
android:id="@+id/button_1"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="Button 1"
app:layout_constraintEnd_toStartOf="@+id/button_2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_2"
android:layout_width="0dp"
app:layout_constraintWidth_percent="0.5"
android:layout_height="50dp"
android:text="Button 2"
app:layout_constraintEnd_toStartOf="@+id/button_3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button_1"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_3"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="Button_3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button_2"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
它看起来像这样:
如果没有 app:layout_constraintWidth_percent="0.5"
,每个按钮都将相等 space,它看起来像这样:
设置所有按钮的按钮宽度0dp,看看魔法:)
android:layout_width="0dp"
我想在我的 Android ConstraintLayout 中添加 3 个按钮,使它们水平分布。我认为这可以通过使用链来完成。所以我用它们做了一个链,然后扩展了它们的视图(通过标记它们 --> 右键单击 --> 组织 --> 水平扩展)。然而,这只是为一个特定的设备扩展了它们。当切换到另一台设备时,按钮看起来不再正确。这是我的代码:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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:id="@+id/outerConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rigthInnerConstraintLayout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/outerConstraintLayout"
app:layout_constraintEnd_toEndOf="@+id/outerConstraintLayout"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/outerConstraintLayout"
app:layout_constraintTop_toTopOf="@+id/outerConstraintLayout"
app:layout_constraintVertical_bias="1.0">
<Button
android:id="@+id/button_1"
android:layout_width="425dp"
android:layout_height="@dimen/_30sdp"
android:text="Button 1"
app:layout_constraintEnd_toStartOf="@+id/button_2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_2"
android:layout_width="425dp"
android:layout_height="@dimen/_30sdp"
android:text="Button 2"
app:layout_constraintEnd_toStartOf="@+id/button_3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button_1"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_3"
android:layout_width="426dp"
android:layout_height="@dimen/_30sdp"
android:text="Button_3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button_2"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
对于我使用可缩放的高度,我使用可缩放的尺寸单位 (https://github.com/intuit/sdp),但对于按钮的宽度,dp 值由 Android Studio 分配(展开后)。我认为这是问题所在。这些 dp 值是硬编码的。这意味着在更改设备时,值仍然相同,这会导致外观不正确。我的问题是如何将 3 个按钮排列成链状(或其他),以便它们在任何设备上水平跨越整行?
这些 dp 值是硬编码的。这意味着当更改设备时,值仍然相同,导致外观不正确 - 这是正确的。
如何修复
如果您将按钮上的 android:layout_width="426dp"
替换为 android:layout_width="0dp"
。
您的按钮现在将取消约束,现在每个按钮都将占用 33.3%
屏幕宽度。
您可以通过将 app:layout_constraintWidth_percent="0.x"
添加到您的按钮来更改每个按钮的宽度(只有当您的视图也具有 android:layout_width="0dp"
时它才会起作用),现在您的按钮将占用 x屏幕宽度的百分比。
例子
连续放置 3 个按钮 但是 中心按钮将占据屏幕尺寸的 50%,您可以这样使用它:
<androidx.constraintlayout.widget.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:id="@+id/outerConstraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/rigthInnerConstraintLayout"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/white"
app:layout_constraintBottom_toBottomOf="@+id/outerConstraintLayout"
app:layout_constraintEnd_toEndOf="@+id/outerConstraintLayout"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@+id/outerConstraintLayout"
app:layout_constraintTop_toTopOf="@+id/outerConstraintLayout"
app:layout_constraintVertical_bias="1.0">
<Button
android:id="@+id/button_1"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="Button 1"
app:layout_constraintEnd_toStartOf="@+id/button_2"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_2"
android:layout_width="0dp"
app:layout_constraintWidth_percent="0.5"
android:layout_height="50dp"
android:text="Button 2"
app:layout_constraintEnd_toStartOf="@+id/button_3"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button_1"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button_3"
android:layout_width="0dp"
android:layout_height="50dp"
android:text="Button_3"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/button_2"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
它看起来像这样:
如果没有 app:layout_constraintWidth_percent="0.5"
,每个按钮都将相等 space,它看起来像这样:
设置所有按钮的按钮宽度0dp,看看魔法:)
android:layout_width="0dp"