Je souhaite ajouter une image à une Button
(pas de imagebutton
, car le bouton en question peut contenir du texte ou une image; le bouton image a le même problème), tout en conservant le bouton de style Android d'origine. Donc, ajouter Android:background
dans le XML ne coupe pas, cela enlèvera le bouton par défaut d'Android avec des coins arrondis, etc. (Android.R.drawable.btn_default)
Est-ce que c'est possible?
Je pense qu’une façon de faire est de créer une image 9patch
pour le bouton enfoncé (une en haut et une en bas) et onTouch Action_DOWN
de dessiner un fond superposé et de le placer sur le bouton, et de faire la même chose mais avec un autre 9patch
pour onTouch Action_UP
, Je pense que cela réduira considérablement les performances de l'application, car cela nécessitera beaucoup de lecture des ressources et la fusion des calques pour tous les clics de bouton (et pour mon application, ce sera beaucoup). Est-ce que ce que je dis ci-dessus est correct?
EDIT: Je ne peux pas déclarer la source de l'image dans le fichier XML, car je reçois les images d'un service Web. Tout peut donc être placé sur les boutons, mais cela doit se faire par programme.
Cela peut être fait en utilisant les attributs Android:drawableTop
, Android:drawableBottom
, Android:drawableLeft
, Android:drawableRight
dans votre layout.xml.
<Button
Android:layout_width="0dp"
Android:layout_weight="1"
Android:background="@drawable/home_button"
Android:drawableLeft="@Android:drawable/ic_menu_edit"
Android:drawablePadding="6dp"
Android:gravity="left|center"
Android:height="60dp"
Android:padding="6dp"
Android:text="AndroidDhina"
Android:textColor="#000"
Android:textStyle="bold" />
pour plus d'informations http://androiddhina.blogspot.in/2015/09/how-to-add-image-inside-button.html
Définir ci-dessous la propriété du bouton d'affichage de l'image avec du texte, en utilisant cette propriété.
<Button Android:drawableTop="@drawable/ic_launcher"/>
Pour le réglage de l'image:
btn.setBackgroundResource(R.drawable.ic_launcher);
Pour la mise en texte:
btn.setText("My Button");
Code:
private Drawable buttonDrawable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
final Button btn=(Button) findViewById(R.id.button1);
buttonDrawable=btn.getBackground();
//Setting the image.
btn.setBackgroundResource(R.drawable.ic_launcher);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
/*Removing image and setting text*/
btn.setBackgroundDrawable(buttonDrawable);
btn.setText("My Button");
}
});
}
Vous pouvez créer votre propre dessin avec plusieurs états et le définir en arrière-plan
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:state_enabled="false"
Android:drawable="@drawable/selected" />
<item Android:drawable="@drawable/normal" />
</selector>
Les tirables peuvent avoir des coins arrondis comme ça.
<corners Android:topLeftRadius="5dp" Android:topRightRadius="5dp"
Android:bottomLeftRadius="0.2dp" Android:bottomRightRadius="0.2dp"/>