J'ai donc créé une sous-classe d'activité appelée CustomTitlebarActivity. Essentiellement, chaque activité principale de mon application aura une barre de titre personnalisée avec de nombreuses fonctionnalités communes telles qu'un bouton d'accueil, un titre, un bouton de recherche, etc. Dans mon implémentation actuelle, j'utilise toujours explicitement une instruction include dans le XML de mise en page pour chaque CustomTitlebarActivity:
<include layout="@layout/titlebar" />
Il semble naturel que je puisse le faire dans CustomTitlebarActivity. J'ai deux questions: quel code peut remplacer cette balise include et où dois-je mettre le code? (Mon premier réflexe serait de le mettre dans la méthode setContentView de CustomTitlebarActivity.)
Sur une note connexe, j'apprécierais un aperçu de meilleures façons de réutiliser Android UI code (même si, en soi, les barres de titre doivent varier légèrement entre les activités.)
Personnellement, j'écrirais probablement ma sous-classe Activity
pour toujours setContentView
dans un fichier de mise en page contenant une verticale fill_parent
LinearLayout
contenant uniquement ma barre de titre: -
<LinearLayout Android:id="@+id/custom_titlebar_container"
Android:orientation="vertical"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent">
<!--titlebar here-->
</LinearLayout>
Ensuite, je définirais une méthode abstraite getContentAreaLayoutId()
dans CustomTitlebarActivity
qui renvoie la disposition ID
du contenu sous la barre de titre pour chaque sous-classe; la base onCreate()
de CustomTitlebarActivity
appellerait alors simplement
setContentView(R.layout.custom_titlebar_activity_frame_from_above);
View.inflate(this, getContentAreaLayoutId(), findViewById(R.id.custom_titlebar_container));
Alternativement, vous pourriez avoir votre méthode abstraite pour obtenir la zone de contenu renvoyer un View
plutôt qu'un int
, vous donnant plus de flexibilité pour construire vos vues dynamiquement (mais vous obligeant à les gonfler vous-même dans le simple il suffit de vider cette disposition XML ici cas).
J'ai aussi rencontré ce problème et je viens de le résoudre maintenant. Je pense que ma solution est plus simple:
créer un gonfleur:
LayoutInflater inflater = (LayoutInflater) this.getSystemService(LAYOUT_INFLATER_SERVICE);
gonfler la disposition enfant:
View childLayout = inflater.inflate(R.layout.child,
(ViewGroup) findViewById(R.id.child_id));
ajoutez-le au parent:
parentLayout.addView(childLayout);
C'est fait, profitez-en!