web-dev-qa-db-fra.com

Comment définir une largeur maximale pour une vue dans un Android constraintLayout?

J'ai une mise en page qui ressemble à ceci:

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

Et je veux le changer pour que la barre de recherche par défaut ait une certaine largeur, mais si l'écran n'est pas assez large, il remplit simplement l'écran (avec des marges). J'ai essayé de définir layout_width, mais il disparaît simplement de l'écran s'il est trop large. L'utilisation de max_width ne fait rien du tout. Ce que je veux est-il possible dans un ConstrainstLayout? Sinon, que dois-je utiliser?

26
pjc

Je pense que ce que vous recherchez est matchConstraintMaxWidth attribut.

Si vous l'ajoutez à votre SeekBar avec une valeur de, disons, 200dp, en conservant les contraintes gauche et droite au parent et une largeur de 0dp, il étendra la largeur de la vue jusqu'à 200dp, mais s'il y a plus d'espace, il restera à 200dp.

donc votre xml devrait ressembler à ceci:

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

vous devriez également pouvoir le définir par programme avec

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

Notez que si votre vue n'a qu'une seule contrainte horizontale, vous devez ajouter cette ligne 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