2017-07-10 25 views
5

私はこのようになり、レイアウトがあります。アンドロイドのconstraintLayoutでビューの最大幅を設定するにはどうすればよいですか?

<?xml version="1.0" encoding="utf-8"?> 
<android.support.constraint.ConstraintLayoutxmlns: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" /> 

を、一定の幅にシークバーのデフォルトは、画面がない場合ように、私はそれを変更したいです十分に広い、それはちょうど画面をいっぱいにする(余白を付けて)。私はlayout_widthを設定しようとしましたが、あまりにも広すぎると画面から外れます。 max_widthを使用すると、何も行われません。私はConstrainstLayoutで可能なのですか?もし私が何を使うべきでないなら?

+0

でプログラム的に設定することができるはずです。 –

答えて

19

あなたが探しているのはmatchConstraintMaxWidthという属性だと思います。あなたが親と0dpの幅に左右の制約を保ち、200dp、たとえば、の値を使用してSeekBarにそれを追加した場合、それは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 = ... 
+0

これはConstraintLayout.LayoutParamsクラスのフィールドですか?それは実行時に設定する必要がありますか? – pjc

+0

正しいです、それはConstraintLayout.LayoutParamsのフィールドです、私はそれもJava経由で設定することができると想像します – lelloman

+0

私は悪いコメントだと思う、それはすべての画面が値を変更するために必要ですので – Morozov

関連する問題