Android Studio ConstraintLayout GuideLines on Button 并保持正方形
Android Studio ConstraintLayout GuideLines on Button while keeping it square
我试图让我的所有观点都符合指导方针,这样它就永远是相对的,不会在不同的屏幕上乱七八糟。
我 运行 遇到了一个问题,我有一个按钮(使用没有文本的图像背景来控制按钮大小)。我想在保持正方形的同时也保持在指导方针之内......但是当然,它不能那样,因为除非分辨率是正方形(它从来不是),否则你不能总是在指导方针内保持正方形。
有没有办法强制其大小为正方形,同时保持相对大小并根据屏幕大小调整大小?
经过试验,我想我明白了。关键是layout_constraintDimensionRatio
命令。
在这个布局中,我有一个没有文本的按钮(使用暂停图标作为背景——很容易看出它是不是正方形)。它被限制为距离左上角 30% 的两条网格线。您当然可以根据需要进行修改。
按钮的宽度设置为wrap_content
,而高度设置为0dp
,表示使用约束。
但关键是设置layout_constraintDimensionRatio="H,1:1"
。这会强制比率始终为平方。
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="H,1:1"
android:background="@android:drawable/ic_media_pause"
app:layout_constraintStart_toStartOf="@+id/vert_guide"
app:layout_constraintTop_toTopOf="@+id/horiz_guide"
/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/vert_guide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="30pt" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/horiz_guide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="30pt" />
</androidx.constraintlayout.widget.ConstraintLayout>
让我知道这是如何工作的。我没有对此进行彻底测试,因此它可能无法在所有情况下使用。
我试图让我的所有观点都符合指导方针,这样它就永远是相对的,不会在不同的屏幕上乱七八糟。
我 运行 遇到了一个问题,我有一个按钮(使用没有文本的图像背景来控制按钮大小)。我想在保持正方形的同时也保持在指导方针之内......但是当然,它不能那样,因为除非分辨率是正方形(它从来不是),否则你不能总是在指导方针内保持正方形。
有没有办法强制其大小为正方形,同时保持相对大小并根据屏幕大小调整大小?
经过试验,我想我明白了。关键是layout_constraintDimensionRatio
命令。
在这个布局中,我有一个没有文本的按钮(使用暂停图标作为背景——很容易看出它是不是正方形)。它被限制为距离左上角 30% 的两条网格线。您当然可以根据需要进行修改。
按钮的宽度设置为wrap_content
,而高度设置为0dp
,表示使用约束。
但关键是设置layout_constraintDimensionRatio="H,1:1"
。这会强制比率始终为平方。
<?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:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="H,1:1"
android:background="@android:drawable/ic_media_pause"
app:layout_constraintStart_toStartOf="@+id/vert_guide"
app:layout_constraintTop_toTopOf="@+id/horiz_guide"
/>
<androidx.constraintlayout.widget.Guideline
android:id="@+id/vert_guide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_begin="30pt" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/horiz_guide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_begin="30pt" />
</androidx.constraintlayout.widget.ConstraintLayout>
让我知道这是如何工作的。我没有对此进行彻底测试,因此它可能无法在所有情况下使用。