web-dev-qa-db-fra.com

Comment définir le style d'un bouton dans Android?

J'ai défini les fichiers ci-dessous dans le dossier res.

styles_apptheme.xml

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://Android-holo-colors.com -->
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <style name="ButtonAppTheme" parent="Android:Widget.Holo.Light.Button">
      <item name="Android:background">@drawable/apptheme_btn_default_holo_light</item>
  </style> 
</resources>

themes_apptheme.xml

<?xml version="1.0" encoding="utf-8"?>

<!-- Generated with http://Android-holo-colors.com -->
<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">

  <style name="AppTheme" parent="@style/_AppTheme"/>

  <style name="_AppTheme" parent="Theme.AppCompat.Light">

    <item name="Android:editTextBackground">@drawable/apptheme_edit_text_holo_light</item>

    <item name="Android:buttonStyle">@style/ButtonAppTheme</item>

  </style>

</resources>

Dans mon fichier Layout.xml, j'ai défini mon bouton comme ci-dessous

<Button
        Android:id="@+id/btnAddTitle"
        Android:layout_below="@id/edEnterTitleValue"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="@string/btn_AddTitle"
        Android:layout_margin="20dp"
/>

Si j'ajoute la ligne ci-dessous à la vue des boutons ci-dessus,

Android:background="@style/ButtonAppTheme"

L'application se bloque en disant que la ressource drawable doit être définie pour l'attribut background.

J'ai donc créé le fichier dessinable ci-dessous - abc.xml

<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_window_focused="false" Android:state_enabled="true"
        Android:drawable="@drawable/apptheme_btn_default_normal_holo_light" />
    <item Android:state_window_focused="false" Android:state_enabled="false"
        Android:drawable="@drawable/apptheme_btn_default_disabled_holo_light" />
    <item Android:state_pressed="true"
        Android:drawable="@drawable/apptheme_btn_default_pressed_holo_light" />
    <item Android:state_focused="true" Android:state_enabled="true"
        Android:drawable="@drawable/apptheme_btn_default_focused_holo_light" />
    <item Android:state_enabled="true"
        Android:drawable="@drawable/apptheme_btn_default_normal_holo_light" />
    <item Android:state_focused="true"
        Android:drawable="@drawable/apptheme_btn_default_disabled_focused_holo_light" />
    <item
         Android:drawable="@drawable/apptheme_btn_default_disabled_holo_light" />
</selector>

Si je mets Android:background="@drawable/abc" Je ne vois pas le style défini dans le bouton.

Alors, faites-moi savoir comment je peux définir le style du bouton.

Merci.

17
Prem

Ce serait plutôt simple si vous le faites de cette façon.

Créez d'abord un button_selector.xml dans un dossier dessinable.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<item Android:state_pressed="true" >
 <shape Android:shape="rectangle"  >
     <corners Android:radius="5dp" />
     <stroke Android:width="1dip" Android:color="@color/green_temp" />
     <gradient Android:angle="-90" Android:startColor="@color/green_temp" Android:endColor="@color/green_temp"  />            
 </shape>
</item>
<item Android:state_focused="true">
 <shape Android:shape="rectangle"  >
     <corners Android:radius="5dp" />
     <stroke Android:width="1dip" Android:color="#971E05" />
     <solid Android:color="#58857e"/>       
 </shape>
</item>  
<item >
<shape Android:shape="rectangle"  >
     <corners Android:radius="5dp" />
     <stroke Android:width="1dip" Android:color="@color/bright_green" />
     <gradient Android:angle="-90" Android:startColor="@color/green_temp" Android:endColor="@color/button_green" />            
 </shape>
</item>
</selector>

Ajoutez ces couleurs dans colors.xml du dossier values.

<!-- Green -->
<color name="green_temp">#23A96E</color>
<color name="green_dark">#159204</color>
<color name="bright_green">#02D8B0</color>
<color name="button_green">#10a54a</color>

Enfin, dans le bouton souhaité de layout.xml, placez l'arrière-plan du sélecteur ci-dessus.

<Button
    Android:id="@+id/btnAddTitle"
    Android:layout_below="@id/edEnterTitleValue"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/btn_AddTitle"
    Android:background="@drawable/button_selector"
    Android:layout_margin="20dp"
/>

Ensuite, tout sera fait, votre bouton sera de la couleur que vous souhaitez.

19
Crawler

Android Button Maker est un outil en ligne pour générer du code de boutons pour Android Apps. Android API fournit des ressources dessinables où le fichier XML définit la forme géométrique, y compris les couleurs, la bordure et les dégradés) Ces boutons sont générés en fonction du code XML dessinable qui se charge plus rapidement que les boutons png normaux. Vous pouvez personnaliser les propriétés des boutons dans le panneau de configuration et obtenir le code source.

Vérifiez ce lien Button Maker

Pas besoin de casser le cerveau ... cet outil le rend simple

8
Harsha Vardhan

remplacer

Android:background="@style/ButtonAppTheme"

avec

style="@style/ButtonAppTheme"

et tout va bien!

6
behnamizadi

Essayez ceci comme alternative. créer un dossier dessinable sous res puis créer des fichiers xml et copypaste sous le code et essayez d'abord puis vous personnalisez selon vos besoins.

button_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" 
Android:shape="rectangle">

<solid Android:color="#00acc1"/>
<stroke Android:width="2dp" Android:color="#ffffff"/>
<corners Android:radius="2dp"/> </shape>

button_bg_pressed.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" 
Android:shape="rectangle">

<solid Android:color="#006064"/>
<stroke Android:width="1dp" Android:color="#ffffff"/>
<corners Android:radius="2dp"/> </shape>

button_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android" >

<item Android:state_focused="true" Android:state_pressed="true" 
        Android:drawable="@drawable/button_bg_pressed" /> 
<item Android:state_focused="false" Android:state_pressed="true" 
        Android:drawable="@drawable/button_bg_pressed" /> 
<item Android:drawable="@drawable/button_bg" /> </selector>

Et maintenant, dans votre bouton xml, définissez l'arrière-plan comme button_selector.xml

<Button
    Android:id="@+id/btnAddTitle"
    Android:layout_below="@id/edEnterTitleValue"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@string/btn_AddTitle"
    Android:background="@drawable/button_selector"
    Android:layout_margin="20dp"/>

Cela fera le travail pour vous. Vous pouvez personnaliser l'ensemble de votre style de bouton de cette façon.

4
Kavin Prabhu

Si vous souhaitez avoir l'animation par défaut du bouton par conception de matériau et changer la couleur du bouton, essayez ceci.

<Button
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:padding="@dimen/padding_12"
    Android:text="button text here"
    Android:theme="@style/NavyBtn" />

dans style.xml

<style name="NavyBtn" parent="Theme.AppCompat.Light">
    <item name="colorButtonNormal">#020e39</item>
    <item name="Android:textColor">#FFFFFF</item>
</style>
2
Ting