4
votes

Android comment centrer le texte de la puce avec une taille fixe?

J'ai une puce avec 100dp de largeur mais le texte n'est pas centré comment je peux centrer le texte.

J'utilise androidx avec la bibliothèque de matériaux, j'ai essayé de mettre android:textAlignment="center" et android:gravity="center" mais ne fonctionne pas

<com.google.android.material.chip.Chip
    android:id="@+id/chip"
    style="@style/Widget.MaterialComponents.Chip.Choice"
    android:layout_width="100dp"
    android:layout_height="wrap_content"
    android:text="7:00" />

J'ai ceci

puce

Je veux ceci

entrez la description de l'image ici


3 commentaires

Pouvez-vous s'il vous plaît poster une capture d'écran de ce que vous avez accompli jusqu'à présent?


oui, j'ai mis à jour le post


Je ne pense pas que ce soit possible. En utilisant android:gravity="center" vous devriez avoir dans logcat W/Chip: Chip text must be vertically center and start aligned


3 Réponses :


4
votes

La réponse courte:

Les puces ne sont pas destinées à être utilisées de la manière dont vous essayez de les utiliser. Ils sont censés envelopper votre contenu. Par conséquent, il n'y a pas de moyen propre d'aligner le texte au centre. Il existe une solution de contournement, vous pouvez utiliser les attributs Chip_textEndPadding et Chip_textStartPadding , ce qui sera un peu gênant je suppose.

Je ne sais pas vraiment ce que vous essayez d'accomplir, je veux dire, quel est votre pourquoi? Est-ce un bouton? Est-ce supposé simplement montrer du texte? Veuillez décrire la fonctionnalité, ou au moins une partie de celle-ci.

En tous cas:

Selon les directives de conception des matériaux

Les puces permettent aux utilisateurs de saisir des informations, d'effectuer des sélections, de filtrer le contenu ou de déclencher des actions. Les puces doivent apparaître dynamiquement sous la forme d'un groupe de plusieurs éléments interactifs. Contrairement aux boutons, qui devraient être un appel à l'action cohérent et familier, un appel auquel un utilisateur s'attend à apparaître comme la même action dans la même zone générale.

Votre fonctionnalité a-t-elle quelque chose à voir avec cela?

Si vous souhaitez un composant circulaire cliquable, vous pouvez simplement utiliser lebouton Matériau .

Il y a une question similaire qui a été posée sur github .


0 commentaires

11
votes

tout à l'heure, j'ai rencontré le même problème, et je l'ai résolu en définissant une propriété de puce: android: textAlignment = "center" . J'ai testé votre exemple et cela fonctionne très bien aussi, voici le code que j'ai testé:

<FrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <com.google.android.material.chip.Chip
            android:id="@+id/chip"
            style="@style/Widget.MaterialComponents.Chip.Choice"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:text="7:00"
            android:textAlignment="center"/>
</FrameLayout>

Assurez-vous également de ne pas définir ou modifier l'alignement du texte d'une puce quelque part dans votre code.


1 commentaires

chip.setTextAlignment (View.TEXT_ALIGNMENT_CENTER); si vous voulez le faire par programme.



0
votes

Utilisez isTextAlignmentResolved , par exemple, chipname.isTextAlignmentResolved() pour effectuer cette opération par programme.


0 commentaires