2011-04-15 3 views
2

J'ai une classe qui étend un bouton. Je veux ajouter un attribut supplémentaire à celui-ci. Est-il possible d'initialiser cet attribut à partir de XML? Par exemple:Définition des attributs des vues personnalisées dans Android

<MyButton android:id="@+id/myBtn" myValue="Hello World"></MyButton> 

public class MyButton extends Button{ 
private String myValue = ""; 

public CalcButton(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
} 
} 

Répondre

1

Oui. Vous pouvez avoir des attributs personnalisés et leur attribuer des valeurs en XML. Vous pouvez même assigner des méthodes pour gérer les événements personnalisés sur vos widgets. Long press definition at XML layout, like android:onClick does

Les étapes nécessaires.

  1. Implémentez votre widget personnalisé.
  2. ajouter ensuite le fichier attrs.xml dans res/valeurs/ avec le contenu suivant:

    <xml version="1.0" encoding="utf-8"?> 
    <resources> 
        <declare-styleable name="MyButton"> 
         <attr name="myValue" format="string"/> 
        </declare-styleable> 
    </resources> 
    
  3. XML de récupérer les valeurs dans le constructeur MyButton. N'oubliez pas d'implémenter tous les constructeurs, pas seulement un.
  4. Utiliser un nouvel attribut dans votre mise en page xml:

    <LinearLayout 
        xmlns:android="http://schemas.android.com/apk/res/android" 
        xmlns:custom="http://schemas.android.com/apk/res/**your.package**" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent" 
        android:orientation="vertical" 
        > 
    
        <your.package.MyButton 
         android:id="@+id/theId" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         custom:myValue="myDoSomething" 
        /> 
        <!-- Other stuff --> 
    </LinearLayout> 
    
+0

comment voulez-vous chercher en fait sur mesure: maValeur dans la classe MyButton? –

+0

@GeniaS. S'il vous plaît regardez le lien que j'ai fourni. Il existe un exemple de code complet avec la récupération de la valeur de xml dans le constructeur. –

Questions connexes