2017-07-10 75 views
5

Şöyle bir düzen vardır:Bir android kısıtlamasında görünüm için maksimum genişlik nasıl ayarlanırLayout?

<?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" /> 

Ve belli bir genişliğe seekbar varsayılan, ancak ekran değilse böylece onu değiştirmek istiyorum yeterince geniş, sadece ekranı (kenar boşlukları ile) doldurur. Layout_width öğesini ayarlamayı denedim, ancak ekran çok genişse ekrandan çıkıyor. Max_width kullanımı hiç bir şey yapmaz. ConstrainstLayout'ta istediğim şey nedir? Eğer değilse ne kullanmalıyım?

+0

ile programlı olarak ayarlayın gerekir

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

. –

cevap

19

Aradığınız şeyin matchConstraintMaxWidth özniteliğidir.

Eğer ebeveyn ve 0dp genişliğinde için sol ve sağ kısıtlamaları tutarak 200dp, diyelim ki, bir değerle senin SeekBar eklerseniz

, 200dp kadar o görünümün genişlik germek, ancak daha olanak olup olmadığına 200dp'de kalacak.

böylece xml aşağıdaki gibi görünmelidir: Ayrıca farklı ekran çözünürlükleri için farklı düzenler kullanmalıdır

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

Yani ConstraintLayout.LayoutParams sınıfındaki bir alan var mı? çalışma zamanında ayarlanmak zorunda mı? – pjc

+0

doğru, bu ConstraintLayout.LayoutParams bir alan, ben de o kadar da kötü olurdu demek Eğer tüm ekranlar için – lelloman

+0

Java ile ayarlanabilir olduğunu düşünüyorum Uygulama, genel olarak, katılıyorum. Ancak, LayoutParams her zaman başlatılır ve çalışma zamanında, açıkça kodunuzda veya LayoutInflater tarafından ayarlanır. Çoğu senaryoda, xml'deki her şeyi bildirmeniz daha uygun olur, ancak java veya kotlin'de bazı değerleri başlatmanız veya ayarlamanız gereken durumlar olabilir: D – Morozov