ConstraintLayoutを試してみましたが、ビューの最大幅を親のパーセンテージに設定する方法はありますか(そして、一致制約の高さと寸法比は1:1)
最大幅を使用しないコードは次のとおりです。
<?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"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<FrameLayout
Android:id="@+id/frameLayout3"
Android:layout_width="0dp"
Android:layout_height="259dp"
Android:layout_marginEnd="8dp"
Android:layout_marginStart="8dp"
Android:background="@Android:color/black"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent"/>
<ImageView
Android:id="@+id/imageView"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:src="@Android:drawable/ic_menu_add"
app:layout_constraintBottom_toBottomOf="@+id/frameLayout3"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.3"/>
</Android.support.constraint.ConstraintLayout>
これが結果です:
タブレット:
電話:
2つの属性を使用して最大幅のパーセンテージを達成しました。
app:layout_constraintWidth_max="wrap"
app:layout_constraintWidth_percent="0.4"
例:
<TextView
Android:id="@+id/textView2"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginStart="8dp"
Android:layout_marginTop="8dp"
Android:text="Helo world"
Android:textAlignment="viewStart"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_max="wrap"
app:layout_constraintWidth_percent="0.4" />
テキスト幅は親の40%に増加し、コンテンツがそれを超えると折り返されます。
私があなたの問題を正しく理解しているなら、あなたはほとんどそこにいます。私はあなたがframeLayout
静的な高さを与えていると思います、それがタブレットで適切な結果を与えていない理由です。あなたがしなければならないことは、frameLayout
の高さをimageView
..に対して相対的にすることです。そのため、imageView
のサイズが大きくなると、frameLayout
も一緒に大きくなります。
あなたはこのようなことをすべきだと思います
<?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"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<ImageView
Android:id="@+id/imageView"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:src="@Android:drawable/ic_menu_add"
app:layout_constraintDimensionRatio="1:1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintWidth_percent="0.3" />
<FrameLayout
Android:id="@+id/frameLayoutTwo"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:background="@Android:color/black"
app:layout_constraintBottom_toBottomOf="@+id/imageView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent" />
</Android.support.constraint.ConstraintLayout>
確認したところ、携帯電話とタブレットで同じ結果が得られました。私があなたの問題を誤解した場合、私を訂正してください。
いいえ、ありません。機能リクエストを提出する必要があると思います。 PercentRelativeLayoutにもこの機能がないことは確かです。 (この回答はConstraintLayout 1.1に対して正確です)