web-dev-qa-db-ja.com

Android constraintLayout?)でビューの最大幅を設定する方法

次のようなレイアウトがあります。

<?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="match_parent"
    tools:context="com.plarke.proto1.QuizActivity">

<Button
    Android:id="@+id/compare_settings"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="Button"
    app:layout_constraintTop_toTopOf="parent"
    Android:layout_marginTop="16dp"
    Android:layout_marginRight="16dp"
    app:layout_constraintRight_toRightOf="parent"
    Android:layout_marginEnd="16dp" />

<TextView
    Android:id="@+id/compare_score"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="TextView"
    app:layout_constraintTop_toTopOf="parent"
    Android:layout_marginTop="16dp"
    Android:layout_marginLeft="16dp"
    app:layout_constraintLeft_toLeftOf="parent"
    Android:layout_marginStart="16dp" />

<SeekBar
    Android:id="@+id/compare_pitchbar"
    Android:layout_width="0dp"
    Android:layout_height="23dp"
    Android:layout_marginBottom="50dp"
    Android:layout_marginEnd="16dp"
    Android:layout_marginLeft="16dp"
    Android:layout_marginRight="16dp"
    Android:layout_marginStart="16dp"
    Android:progressBackgroundTint="@color/colorAccent"
    Android:progressBackgroundTintMode="src_over"
    app:layout_constraintBottom_toTopOf="@+id/textView"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent" />

<Button
    Android:id="@+id/button2"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="16dp"
    Android:layout_marginLeft="16dp"
    Android:layout_marginRight="16dp"
    Android:text="Button"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    Android:layout_marginStart="16dp"
    Android:layout_marginEnd="16dp" />

<TextView
    Android:id="@+id/textView"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginBottom="50dp"
    app:layout_constraintBottom_toTopOf="@+id/button2"
    tools:text="The seekbar is all the way to the left."
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    Android:layout_marginRight="0dp"
    Android:layout_marginLeft="0dp" />

そして、seekBarのデフォルトが特定の幅になるように変更したいのですが、画面が十分に広くない場合は、画面を(マージンで)埋めるだけです。 layout_widthを設定してみましたが、幅が広すぎると画面から消えてしまいます。 max_widthを使用しても何も起こりません。 ConstrainstLayoutで可能なことはありますか?そうでない場合、何を使用すればよいですか?

26
pjc

私が探しているのは matchConstraintMaxWidth 属性だと思います。

これをSeekBarに追加し、たとえば200dpの値を使用して、親に対する左右の制約と0dpの幅を維持すると、ビューの幅が拡大されます200dpまでですが、部屋がもっとある場合は200dpのままです。

したがって、xmlは次のようになります。

<SeekBar
   ...
    Android:layout_width="0dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintWidth_max="200dp" />

あなたはそれをプログラムで設定することもできるはずです

ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(0, 0);
layoutParams.matchConstraintMaxWidth = ...
71
lelloman

ビューに水平方向の制約が1つしかない場合は、この行を追加する必要があることに注意してくださいapp:layout_constraintWidth_default="percent

<SeekBar
   ...
    Android:layout_width="0dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintWidth_default="percent"
    app:layout_constraintWidth_max="200dp" />
0
Egis