web-dev-qa-db-ja.com

ConstraintLayoutの最大幅の割合

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>

これが結果です:

タブレット:

Tablet

電話:

Phone

14
Hyhage

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%に増加し、コンテンツがそれを超えると折り返されます。

35

私があなたの問題を正しく理解しているなら、あなたはほとんどそこにいます。私はあなたが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>

確認したところ、携帯電話とタブレットで同じ結果が得られました。私があなたの問題を誤解した場合、私を訂正してください。

1
Somesh Kumar

いいえ、ありません。機能リクエストを提出する必要があると思います。 PercentRelativeLayoutにもこの機能がないことは確かです。 (この回答はConstraintLayout 1.1に対して正確です)

0
androidguy