2010-12-11 20 views
3

Je veux créer une vue personnalisée TestView classe pour laquelle je peux créer un objet via new TestView(). Une nouvelle classe d'affichage nécessite cependant un objet AttributeSet. D'où puis-je obtenir cet AttributeSet et qu'est-ce qu'il doit inclure?Création de vue personnalisée

Répondre

10

Ce n'est pas obligatoire, et la plupart du temps, vous n'avez même pas à vous en soucier tant que vous fournissez des constructeurs de View qui les transmettent à super().

public CustomView(Context context) // No Attributes in this one. 
{ 
    super(context); 
    // Your code here 
} 

public CustomView(Context context, AttributeSet attrs) 
{ 
    super(context, attrs); 
    // Your code here 
} 

public CustomView(Context context, AttributeSet attrs, int default_style) 
{ 
    super(context, attrs, default_style); 
    // Your code here 
} 

View prend soin de faire le levage de charges lourdes pour faire face à tous les android:* attributs que vous passerais habituellement lorsque vous ajoutez la vue d'une mise en page. Vos constructeurs pourraient utiliser ces attributs ou vous-même si vous les avez défini:

<com.blrfl.CustomView 
android:id="@+id/customid" 
android:layout_weight="1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_gravity="center" 
blrfl:foo="bar" 
blrfl:quux="bletch" 
/> 
+0

J'ai passé de nombreuses heures à essayer de générer un attrs set à la volée, je l'ai trouvé presque impossible de trouver de la documentation ou des exemples sur la façon de le faire. Une bonne question pourrait être de savoir comment définir les propriétés foo et quux lorsque vous n'utilisez pas attrs, et en utilisant le nouveau CustomView(). – Emile

+0

CustomView (String foo, String bletch) peut-être. – Emile

+0

Posez-le et je posterai une réponse. – Blrfl

0

soit de 3 constructeur fourni par classe d'affichage peut être mis en œuvre .. fournissant ainsi constructeur avec AttributeSet n'est pas obligatoire.