2014-04-30 3 views
0


J'ai une question sur les déclarations XML personnalisées.
J'ai créé ma propre vue avec les attributs personnalisés comme d'habitude. Maintenant, je veux ajouter des attributs plus complexes comme celui-ci: (ce code est non-travail)Attributs complexes dans Android Custom View XML

<com.xxx.yyy.CustomTextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/customTextView1" 
    android:layout_marginBottom="22dp" 
    android:layout_toRightOf="@+id/buttonBlack" 
    android:text="TextView" > 
     <Animation 
      animation:property1="123" 
      animation:property2="456" /> 
     <Animation 
      animation:property1="789" 
      animation:property2="012" > 
     </Animation> 
</com.xxx.yyy.CustomTextView> 

Je ne ai pas trouvé un moyen de le faire moi-même, mais peut-être quelqu'un a eu une idée.

Merci!


Edit:

Je viens de résoudre le problème plus ou moins bien. J'ai créé un nouveau fichier .xml dans mon/res/dossier xml appelé animations.xml

<animations> 
    <animation 
     name="Animation name 1" 
     float1="1.1" 
     float2="1.2" 
     integer1="11" 
     integer2="12" /> 
    <animation 
     name="Animation name 2" 
     float1="2.1" 
     float2="2.2" 
     integer1="21" 
     integer2="22" /> 
</animations> 

Mon point de vue personnalisé dans attrs.xml contient un attribut qui est utilisé pour référencer le fichier ci-dessus animations.xml de:

<declare-styleable name="MyTextView"> 
    <attr name="animations" format="reference" /> 
</declare-styleable> 

maintenant, je parse le fichier .xml référencé dans le constructeur de l'MyTextView comme décrit ici: http://thedevelopersinfo.com/2009/12/14/using-xml-file-resources-in-android/

Peut-être que cela aide quelqu'un à un moment donné.

+0

Vous devriez créer des attributs XML personnalisés pour cela comme décrit ici: http://developer.android.com/training/custom-views/create-view.html#applyattr – JimmyVanBraun

Répondre

1

Sauf si CustomTextView s'étend ViewGroup (ou l'a dans sa hiérarchie de classe) et Animation est une vue personnalisée que vous avez définie, cela ne fonctionnera pas. Seuls les codes Views et ViewGroups sont autorisés dans les fichiers XML de mise en page (et certains balises spéciales définies par Android comme include et merge), et seuls les éléments ViewGroup peuvent contenir des éléments enfants.

+0

Ok merci! C'est exactement ce que je pensais. J'espérais juste qu'il y a une façon de faire cela que je n'ai pas encore vue. – p0wl90

1

Vous pouvez ajouter des attributs XML personnalisés à votre vue personnalisée comme ceci:

<resources> 

<declare-styleable name="YourCustomClass"> 
    <attr name="someCustomAnimationAttribute" format="reference" /> 
</declare-styleable> 

<resources> 

Comment obtenir est décrit ici:

http://developer.android.com/training/custom-views/create-view.html#applyattr

Dans votre mise en page vous devez déclarer un espace de noms :

xmlns:app="http://schemas.android.com/apk/res-auto" 

puis l'utiliser comme ceci :

<com.xxx.yyy.CustomTextView 
android:id="@+id/textView1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_alignBottom="@+id/customTextView1" 
android:layout_marginBottom="22dp" 
android:layout_toRightOf="@+id/buttonBlack" 
android:text="TextView" 
app:someCustomAnimationAttribute="@drawable/someAnimation"> 

De cette façon, vous pouvez fournir ces animations via XML au lieu de les ajouter comme éléments enfants qui n'est pas possible.

+0

Je pense que la principale préoccupation de l'OP est comment récupérer une balise xml enfant dans une vue personnalisée, ie '' – waqaslam

+0

Comme @Karakuri l'a fait remarquer, si cette vue personnalisée étend 'ViewGroup', on peut ajouter des vues enfants (vues enfants personnalisées avec paramètres personnalisés d'ailleurs). Mais fournir une animation de cette façon ne fonctionnera pas. – JimmyVanBraun

+0

Oui exactement. Je savais déjà comment définir des attributs simples.La question était de savoir s'il est possible de définir des attributs plus complexes en tant qu'éléments enfants XML. Mais merci quand même! – p0wl90