2 votes

Peut-on définir une vue comme propriété d'une autre vue dans un fichier de présentation XML ?

Nous disposons d'un service personnalisé GridView qui a headerView y footerView propriétés. Je me demande si, dans Android, il est possible de définir ces propriétés à partir d'un fichier de mise en page.

XAML sous Windows vous permet de le faire facilement puisque vous pouvez spécifier des propriétés soit par le biais d'attributs (pour des choses comme des chaînes, des nombres ou d'autres types simples), soit par le biais d'éléments imbriqués (pour tout type d'objet) à l'aide d'un élément ControlType:PropertyName syntaxe.

Voici une pseudo-version de ce à quoi cela ressemblerait si Android proposait quelque chose de similaire :

<MyCustomGrid
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <!-- This would set the 'headerView' property
         on 'MyCustomGrid' to a TextView -->
    <MyCustomGrid:headerView>

        <TextView android:text="I'm the Header TextView" />

    </MyCustomGrid:headerView>

</MyCustomGrid>

Il est évident que ce qui précède n'est pas valable. Mais est-il possible de faire quelque chose de similaire dans Android, ou dois-je le faire dans le code-behind de l'Activité/Fragment ?

1voto

Thiago Souto Points 628

Oui, c'est possible.

Vous pouvez créer un Vue personnalisée en étendant la classe GridView et en ajoutant de la logique par le biais d'attributs. Cela ne fonctionnera pas comme une propriété attachée à partir de XAML (comme Grid.Column ou Grid.Row de XAML UWP) mais vous pouvez faire quelque chose comme ceci :

<com.teste.widget.MarqueIVGridView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:my_header="@layout/my_header"
/>

N'oubliez pas d'ajouter l'espace de noms à la racine de votre présentation :

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

Google propose cet exemple : HeaderGridView

Elle utilise une approche différente, si vous copiez cette classe, il vous suffira d'utiliser cette "HeaderGridView" et d'appeler la méthode addHeaderView à partir de celle-ci pour envoyer votre vue d'en-tête gonflée.

N'hésitez pas à poser des questions et nous nous ferons un plaisir d'y répondre.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X