[JAVA] Comment définir l'image pour dessiner à gauche / à droite du bouton à l'aide de la police d'icône (Iconics)

Aperçu

La police des icônes est pratique, n'est-ce pas? Les polices d'icônes vous permettent d'afficher des images d'icônes dans votre texte. En d'autres termes, vous pouvez facilement créer des icônes + des boutons de texte. Cependant, comme il est affiché comme un élément, il existe un problème en raison du fait que des tailles différentes ne peuvent pas être utilisées pour le texte et l'icône, et la ligne de base est alignée entre l'icône et le texte.

Les boutons Android peuvent afficher des icônes à l'intérieur des boutons à l'aide des attributs drawableLeft et drawableRight. Cet attribut semble résoudre le problème ci-dessus, mais il ne peut pas être utilisé tel quel car il est nécessaire de spécifier l'image.

Par conséquent, je vais vous expliquer comment convertir la police de l'icône en un vecteur dessinable et l'afficher sous forme d'icône.

Iconics est utilisé comme bibliothèque pour l'utilisation des polices d'icônes.

résultat

Si vous spécifiez l'attribut drawable_icon_font_left comme indiqué ci-dessous, l'icône sera bien affichée.

<Button
    android:text="{faw-android} android"
    />
<Button
    android:text="android"
    app:drawable_icon_font_left="@{`faw_android`}"
    />

image1

Comment ça fonctionne

Installer Iconics et activer DataBinding

Ajoutez les paramètres suivants dans ** build.gradle **. Ici, nous utiliserons AwesomeFont comme exemple.

android {
    ...
    dataBinding {
        enabled = true
    }
}

dependencies {
    ...
    compile "com.mikepenz:iconics-core:2.8.2@aar"
    compile 'com.mikepenz:fontawesome-typeface:4.7.0.0@aar'
}

Activer les icônes

Ajoutez les paramètres suivants à l'activité et au fragment à utiliser.

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate()));

        super.onCreate(savedInstanceState);
        DataBindingUtil.setContentView(this, R.layout.activity_main);
    }
}

Définition de BindingAdapter

** Définissez l'attribut drawable_icon_font_left **.

Dans la méthode, il générera un Drawable à partir des caractères spécifiés. À ce moment-là, vous pouvez définir la même couleur que le texte ou définir la taille de l'icône légèrement plus grande que la taille du texte à votre convenance.

public class BindingAdapterManager {

    @BindingAdapter("drawable_icon_font_left")
    public static void setDrawableIconFontLeft(final Button button, final String icon) {
        final Context context = button.getContext();
        final IconicsDrawable iconicsDrawable = new IconicsDrawable(context)
                .icon(FontAwesome.Icon.valueOf(icon))
                .color(button.getCurrentTextColor())
                .sizePx((int)(button.getTextSize() * 1.25));
        button.setCompoundDrawables(iconicsDrawable, null, null, null);
    }
}

échantillon

J'ai un projet qui fonctionne sur Drawable-Icon-Font @ github.

Merci

Cette astuce est née lors du développement d'un "site où vous pouvez acheter et vendre du matériel photo pour smartphone Snapmart". Malheureusement, la version Android est encore en développement et n'est pas encore disponible. Si vous avez un iPhone, veuillez le télécharger et l'utiliser! Application Snapmart (iOS)

Recommended Posts

Comment définir l'image pour dessiner à gauche / à droite du bouton à l'aide de la police d'icône (Iconics)
Manipulez les pixels pour créer une image d'un ensemble de Mandelbrot
[Rails 6] Comment définir une image d'arrière-plan dans Rails [CSS]
[Rails] Comment afficher les images dans la vue
Comment obtenir la longueur d'un fichier audio avec Java
Comment créer un retrait de deux espaces d'un octet dans l'implémentation JAXB du JDK
[Java] Comment accéder au début d'une chaîne spécifique à l'aide de la classe String
Comment changer la valeur d'une variable à un point d'arrêt dans intelliJ
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
[Swift] Comment obtenir le nombre d'éléments dans un tableau (super basique)
Essayez d'ajouter du texte à une image avec Scala en utilisant la bibliothèque standard de Java
Faire une marge à gauche du TextField
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
Définir l'heure de LocalDateTime à une heure spécifique
[Note] [Débutant] Comment écrire lors de la modification de la valeur d'un élément de tableau dans une phrase répétée de Ruby
Comment créer une combinaison unique de données dans la table intermédiaire des rails
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
J'ai fait un exemple de la façon d'écrire un délégué dans Swift UI 2.0 à l'aide de MapKit
Comment installer Docker dans l'environnement local d'une application Rails existante [Rails 6 / MySQL 8]
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Comment définir le niveau de journalisation à afficher dans la version commerciale de orhanobut / logger
Comment utiliser git avec la puissance de jgit dans un environnement sans commandes git
Comment implémenter une image de profil circulaire avec CarrierWave et R Magick in Rails
Résumé de l'utilisation du jeu de proxy dans IE lors de la connexion avec Java
[Rails] Comment afficher les prévisions météo de l'adresse enregistrée en japonais en utilisant OpenWeatherMap
Comment rendre une image partiellement transparente avec le traitement
Comment régler l'heure d'affichage sur l'heure japonaise dans les rails
Comment convertir A en A et A en A en utilisant le produit logique et la somme en Java
Comment juger le clic de n'importe quelle zone de l'image
Nous avons créé un environnement pour exécuter des tests unitaires à l'aide de la base de données Oracle (oracle12c) sur l'image Docker in Docker (dind) de GitLab-CI
Comment spécifier un tableau pour la valeur de retour / l'argument d'une méthode dans le fichier IDL CORBA
Considérer l'adoption du langage Java à l'ère Reiwa ~ Comment choisir un SDK sûr
Ajouter une icône au lien d'en-tête en utilisant Rails fontawesome
Comment régler chrony lorsque le temps change dans CentOS7
Comment changer une chaîne dans un tableau en un nombre dans Ruby
Comment créer une partie d'espace réservé à utiliser dans la clause IN
Comment récupérer la valeur de hachage dans un tableau dans Ruby
Comment déplacer une autre classe avec une action de bouton d'une autre classe.
[Ruby] Comment récupérer le contenu du double hachage
Comment ajouter les mêmes index dans un tableau imbriqué
Comment dériver le dernier jour du mois en Java
[jsoup] Comment obtenir la totalité de la documentation
Comment configurer un proxy avec authentification dans Feign
[Rails] Comment convertir l'URI de l'image envoyée par http en https lors de l'utilisation de l'API Twitter
[Java] Comment rechercher des valeurs dans un tableau (ou une liste) avec la méthode contains
En utilisant la fonction de détection de visage de Watson Visual Recognition, j'ai essayé de transformer une image corporelle entière d'une personne en une image de la partie du visage uniquement.
Comment déterminer si vous avez effleuré vers la gauche ou la droite dans PagerView
[Swift5] Comment obtenir un tableau et un ensemble de différences entre les tableaux
Comment définir l'adresse IP et le nom d'hôte de CentOS8
Comment afficher 0 sur le côté gauche de la valeur d'entrée standard
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Fixez le nom du fichier de guerre à celui défini dans Maven
Comment obtenir le contenu de la carte à l'aide du mémorandum d'instructions
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
Convertir un tableau de chaînes en une liste d'entiers en Java
Comment stocker les informations saisies dans la zone de texte dans une variable de la méthode
Comment afficher une liste de chaînes dans JSF sous forme de chaînes séparées par des virgules
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java