J'aimerais changer légèrement la couleur d'un bouton Android standard afin de mieux correspondre à la marque d'un client.
Le meilleur moyen que j'ai trouvé pour le faire jusqu'à présent est de changer le Button
dessinable du en dessinable situé dans res/drawable/red_button.xml
:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/red_button_pressed" />
<item android:state_focused="true" android:drawable="@drawable/red_button_focus" />
<item android:drawable="@drawable/red_button_rest" />
</selector>
Mais cela nécessite que je crée en fait trois dessins différents pour chaque bouton que je souhaite personnaliser (un pour le bouton au repos, un lorsqu'il est concentré et un lorsqu'il est enfoncé). Cela semble plus compliqué et non SEC que je n'en ai besoin.
Tout ce que je veux vraiment faire, c'est appliquer une sorte de transformation de couleur au bouton. Existe-t-il un moyen plus simple de changer la couleur d'un bouton que je ne le fais?
android
android-layout
emmby
la source
la source
Réponses:
J'ai découvert que tout cela peut être fait assez facilement dans un seul fichier. Placez quelque chose comme le code suivant dans un fichier nommé
custom_button.xml
, puis définissez-lebackground="@drawable/custom_button"
dans la vue de votre bouton:la source
"Error: No resource found that matches the given name (at 'color' with value '@color/yellow1')"
Ces références aux couleurs intégrées? semble avoir besoin d'un res / values / color.xml pour que cela fonctionneÀ la suite de la réponse de Tomasz, vous pouvez également définir par programme l'ombre de l'ensemble du bouton en utilisant le mode multiplicateur PorterDuff. Cela changera la couleur du bouton plutôt que juste la teinte.
Si vous commencez avec un bouton ombré gris standard:
vous donnera un bouton ombré rouge,
vous donnera un bouton ombré vert, etc., où la première valeur est la couleur au format hexadécimal.
Cela fonctionne en multipliant la valeur de couleur actuelle du bouton par votre valeur de couleur. Je suis sûr que vous pouvez faire beaucoup plus avec ces modes.
la source
import android.graphics.PorterDuff;
Mike, vous pourriez être intéressé par les filtres de couleur.
Un exemple:
essayez ceci pour obtenir la couleur désirée.
la source
C'est ma solution qui fonctionne parfaitement à partir de l'API 15 . Cette solution conserve tous les effets de clic de bouton par défaut, comme le matériau
RippleEffect
. Je ne l'ai pas testé sur des API inférieures, mais cela devrait fonctionner.Il vous suffit de:
1) Créez un style qui ne change que
colorAccent
:2) Ajoutez ces deux lignes à votre
button
widget:Exemple de widget de bouton
la source
colorAccent
influence plus que l'arrière-plan du bouton.Vous pouvez maintenant utiliser de appcompat-v7 AppCompatButton avec l'
backgroundTint
attribut:la source
app:backgroundTint
place deandroid:backgroundTint
lorsque vous utilisez AppCompat.J'aime la suggestion de filtre de couleur dans les réponses précédentes de @conjugatedirection et @Tomasz; Cependant, j'ai trouvé que le code fourni jusqu'à présent n'était pas aussi facile à appliquer que prévu.
Tout d'abord, il n'a pas été indiqué où appliquer et effacer le filtre de couleur. Il est possible qu'il existe d'autres bons endroits pour le faire, mais ce qui m'est venu à l'esprit était un OnTouchListener .
D'après ma lecture de la question d'origine, la solution idéale serait celle qui n'implique aucune image. La réponse acceptée en utilisant custom_button.xml de @emmby est probablement mieux adaptée que les filtres de couleur si c'est votre objectif. Dans mon cas, je commence par une image png d'un concepteur d'interface utilisateur de ce à quoi le bouton est censé ressembler. Si je définit l'arrière-plan du bouton sur cette image, le retour de surbrillance par défaut est complètement perdu. Ce code remplace ce comportement par un effet d'obscurcissement programmatique.
J'ai extrait ceci en tant que classe distincte pour une application à plusieurs boutons - montré comme classe interne anonyme juste pour avoir l'idée.
la source
Si vous créez des boutons de couleur avec XML, vous pouvez rendre le code un peu plus propre en spécifiant l'état focalisé et enfoncé dans un fichier séparé et les réutiliser. Mon bouton vert ressemble à ceci:
la source
La solution la plus courte qui fonctionne avec n'importe quelle version d'Android:
Notes / Exigences :
app:
espace de noms et non l'android:
espace de noms!version compatible avec l'application> 24.2.0
dépendances {compiler 'com.android.support:appcompat-v7:25.3.1'}
Explication :
la source
app:backgroundTint="@color/my_color"
n'a pas fonctionné.android:backgroundTint="@color/my_color"
a parfaitement fonctionné.J'utilise cette approche
style.xml
Comme vous pouvez le voir ci-dessus, j'utilise un style personnalisé pour mon bouton. La couleur du bouton correspond à la couleur d'accent. Je trouve que c'est une bien meilleure approche que la configuration,
android:background
car je ne perdrai pas l'effet d'entraînement que Google fournit.la source
Il existe maintenant un moyen beaucoup plus simple: android-holo-colors.com
Il vous permettra de changer facilement les couleurs de tous les holo drawables (boutons, filateurs, ...). Vous sélectionnez la couleur, puis téléchargez un fichier zip contenant des dessins pour toutes les résolutions.
la source
Utilisez-le de cette façon:
la source
En cours d'
<Button>
utilisationandroid:background="#33b5e5"
. ou mieuxandroid:background="@color/navig_button"
la source
La bibliothèque de composants DroidUX dispose d'un
ColorButton
widget dont la couleur peut être modifiée facilement, à la fois via la définition xml et par programme au moment de l'exécution, de sorte que vous pouvez même laisser l'utilisateur définir la couleur / le thème du bouton si votre application le permet.la source
Vous pouvez également utiliser cet outil en ligne pour personnaliser votre bouton http://angrytools.com/android/button/ et l'utiliser
android:background="@drawable/custom_btn"
pour définir le bouton personnalisé dans votre mise en page.la source
Vous pouvez définir le thème de votre bouton sur ce
la source
Un moyen simple consiste à simplement définir une classe Button personnalisée qui accepte toutes les propriétés que vous souhaitez comme le rayon, le dégradé, la couleur pressée, la couleur normale, etc. Un échantillon est ici
Ceci est extrêmement utile si vous avez beaucoup de boutons avec les mêmes propriétés comme le rayon, la couleur sélectionnée, etc. Vous pouvez personnaliser votre bouton hérité pour gérer ces propriétés supplémentaires.
Résultat (aucun sélecteur d'arrière-plan n'a été utilisé).
Bouton Normal
Bouton enfoncé
la source
La façon dont je fais un bouton de style différent qui fonctionne assez bien est de sous-classer l'objet Button et d'appliquer un filtre de couleur. Cela gère également les états activés et désactivés en appliquant un alpha au bouton.
la source
values \ styles.xml
puis:
la source
Selon les directives de conception des matériaux, vous devez utiliser le style comme le code ci-dessous
et dans la mise en page, ajoutez cette propriété à votre bouton
la source
C'est simple .. ajoutez cette dépendance dans votre projet et créez un bouton avec 1. N'importe quelle forme 2. N'importe quelle couleur 3. N'importe quelle bordure 4. Avec des effets de matière
https://github.com/manojbhadane/QButton
la source