web-dev-qa-db-fra.com

Bouton Matériel avec icône à droite

le nouveau bouton matériel de Google est vraiment sympa. Selon le documentation , nous pouvons définir une icône qui est affichée par défaut sur la gauche. Est-ce que quelqu'un sait comment le mettre à droite? Je ne trouve rien à ce sujet.

Merci.

13
Benjamin Ledet

J'ai googlé aujourd'hui le même problème et j'ai trouvé ceci: Android:layoutDirection="rtl". Cela fonctionne dans mon projet de test.

18
Anna

Il y a une nouvelle valeur de gravité pour end dans la version 1.1.0-alpha06

5
Victor Gabriel

Utilisez simplement l'attribut app:iconGravity ou la méthode setIconGravity() .

Il nécessite la version 1.1.0 des composants matériels pour Android.

enter image description here

Vous pouvez également utiliser app:iconGravity="end".

Toujours selon documentation :

Si une icône alignée au début est ajoutée à ce bouton, veuillez utiliser un style comme l'un des styles ".Icon" spécifiés dans les styles MaterialButton par défaut. Les styles ".Icon" ajustent légèrement le rembourrage pour obtenir un meilleur équilibre visuel. Ce style ne doit être utilisé qu'avec un bouton icône aligné au début. Si votre icône est alignée à la fin, vous ne pouvez pas utiliser un style ".Icon" et devez à la place ajuster manuellement votre rembourrage de sorte que l'ajustement visuel soit reflété.

2
Gabriele Mariotti

Solution 1

Utilisez cette méthode d'extension (kotlin) pour chaque bouton:

fun MaterialButton.setRightIcon() { 
    TextViewCompat.setCompoundDrawablesRelative(this, null, null, this.icon, null) 
}

Solution 2 (meilleure façon)

Étendez la classe MaterialButton pour l'utiliser partout:

class RtlMaterialButton(context: Context, attrs: AttributeSet) : MaterialButton(context, attrs) {

    override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec)
        updateIcon()
    }
    private fun updateIcon() {
        TextViewCompat.setCompoundDrawablesRelative(this, null, null, icon, null)
    }

}

Solution 3 (travaillez dans minSDK>=17)

Si vous souhaitez utiliser textStart gravity pour l'icône, vous pouvez utiliser Android:layoutDirection="rtl" pour chaque bouton.

ensemble Android:supportsRtl="true" dans votre application AndroidManifest.xml dans ton <Application> tag

1
sma6871