Des conseils complexes de conception UI Android nécessaires (fragments)

Je développe des applications destinées aux tablettes et aux télévisions Google. Ce sera comme de nombreuses applications standard de Google TV avec un LeftNavBar et une barre de recherche supérieure qui est commune à tous les écrans d'application. Il ressemblera à l'image suivante:

Écran principal Entrez la description de l'image ici

  • Il est possible de créer un ToggleButton sans texte?
  • Comment créer un pipe nommé (mkfifo) dans Android?
  • Vérifier l'application Android est-elle au premier plan ou non?
  • Utiliser la police Roboto pour les périphériques antérieurs
  • OnItemClickListener ne lance pas sur Custom ArrayAdapter
  • Mise à jour automatique pour les applications Android (privées)
  • La zone RED sera différente pour tous les autres écrans. Il peut contenir des données comme suit les maquettes d'écrans:

    Activité 1 chargée dans le conteneur principal Entrez la description de l'image ici

    Activité deux chargée dans le conteneur principal Entrez la description de l'image ici

    Vous pouvez donc voir que des sections complètement différentes peuvent être chargées dans la zone principale.

    L'écran 3 peut être chargé en tant que section détaillée lors de la sélection d'un élément de liste dans l'écran 2 (par exemple dans la liste des fragments) OU il peut être chargé en sélectionnant un onglet (qui apparaîtra dans LeftNavBar).

    Voici comment j'essaie de le mettre en œuvre.

    Étape 1. J'ai créé une activité principale avec le XML suivant:

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#9ccc" > <!-- Top Bar --> </LinearLayout> <FrameLayout android:id="@+id/mainContainer" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> <!-- main Red Container that will load other Activities --> </FrameLayout> </LinearLayout> 

    mainContainer est le conteneur RED où je souhaite charger les Activités. LeftNavBar sera ajouté à cette activité en tant que parent de tous.

    Étape 2 J'ai créé ActivityOne & ActivityTwo avec deux et trois Fragments respectivement (comme indiqué dans la deuxième et troisième image ci-dessus).

    * Étape 3 J'essaie de charger ActivityOne dans mainContainer FrameLayout de la page principale … Mais je ne peux pas l'ajouter.

    J'ai essayé en ajoutant ActivityOne à mainContainer comme suit:

     View v = (new ActivityOne()).getWindow().getDecorView(); FrameLayout mainContainer = (FrameLayout) findViewById(R.id.mainContainer); mainContainer.addView(v); 

    Mais le getWindow() renvoie null ….

    Un autre problème se produit car toutes les données proviennent d'un service distant . Alors, veuillez également suggérer comment puis-je pouvoir faire référence à toutes les activités chargées dans mainContainer dans une sorte de pile … donc je peux simplement recharger le déjà chargé Activité au lieu de créer sa nouvelle instance .. Ceci sera utilisé sur le bouton BACK, appuyez sur.

    OU

    Au lieu de charger une activité dans le conteneur RED ci-dessus, je devrais créer deux activités avec leurs propres fragments et un LeftNavBar. Cela pourrait être plus facile que l'approche susmentionnée. Ou cela pourrait être la seule solution … mais je pense que l'état d'économie pour les boutons BACK peut devenir désordonné … mais j'essaierai de mettre en œuvre ceci

    Que feriez-vous si vous deviez créer ce type d'application? Comment conceviez-vous la mise en page UI pour une meilleure performance / pratique?

    Vos suggestions pour m'aider à définir la mise en page de cette application sont très appréciées.

  • Conversion de JSONArray vers String puis retour
  • Gson - Le même nom de champ, différents types
  • Erreur Android appcompat v7
  • Problème d'affichage de défilement rapide avec ListAdapter et SectionIndexer
  • Comment supprimer un référentiel et en ajouter un nouveau dans Android studio?
  • Comment zoomer toute l'activité sur multi-touches?
  • 2 Solutions collect form web for “Des conseils complexes de conception UI Android nécessaires (fragments)”

    Avertissement

    C'est là que les fragments peuvent être délicats. Le problème serait simple si l'activité 1 et 2 comportait des mises en page identiques afin que vous puissiez simplement attacher / détacher des fragments et utiliser la pile de fragments arrière pour vous détendre.

    Parce que vous voulez que 2 mises en page exclusives contiennent vos fragments, les choses vont être un peu plus impliquées. Dans la mesure du possible, j'essaierais d'utiliser la même disposition pour que vous puissiez suivre le chemin facile.

    En tant qu'autre option, vous pouvez utiliser deux activités comme décrit ci-dessus et envoyer des données d'avant en arrière avec Intents.

    Cela dit, si je devais vraiment mettre en œuvre cette solution comme écrite, voici ce que je ferais. Notez que je ne préconise pas cette solution mais que je ne connais pas une meilleure façon de faire les choses.

    La solution

    Créez un FragmentActivity dont la vue serait l'écran principal comme vous l'avez défini ci-dessus. La disposition de l'écran principal contient:

    • Barre de navigation à gauche
    • Barre du haut
    • 2 mises en page. Layout1 et layout2. Ceux-ci seraient contenus dans une structure parentale, par exemple RelativeLayout ou LinearLayout et contiendraient les éléments FrameLayout nécessaires à vos fragments.

    Exemple en utilisant votre XML (note, les tags sont un peu brefs):

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:background="#9ccc" > <!-- Top Bar --> </LinearLayout> <LinearLayout android:id="@+id/layout1"> <FrameLayout android:id="@+id/listFragment" /> <FrameLayout android:id="@+id/contentFragment" /> </LinearLayout> <LinearLayout android:id="@+id/layout2"> <FrameLayout android:id="@+id/imageFragment" /> <FrameLayout android:id="@+id/boxFragment1" /> <FrameLayout android:id="@+id/boxFragment2" /> <FrameLayout android:id="@+id/boxFragment3" /> </LinearLayout> </LinearLayout> 

    L'idée principale est que vous affichez / cache layout1 & layout2, c'est-à-dire set android: visibility = "gone" en fonction de l'état de votre application.

    Les inconvénients de cette méthode sont les suivants:

    • L'utilisation de backstack de fragments peut être impossible, mais vous devrez suivre l'endroit où l'utilisateur est dans votre flux d'interface utilisateur et gérer le bouton Précédent pour afficher / masquer la mise en page
    • Vous devrez peut-être prendre soin d'attacher / détacher des fragments lorsque vous affichez / masquez leur vue parentale afin de réduire la consommation de ressources alors que les fragments sont invisibles

    Les avantages sont les suivants:

    • Communication facile entre les fragments et l'activité de base car seule une activité est utilisée

    Re: Le problème de Fragments imbriqués

    Pour contourner le problème de «Fragments imbriqués» dans notre application où (comme vous l'avez bien noté) Fragment s ne peut pas ajouter Fragment s J'ai hébergé un Fragment de matrice unique sous l'activité dont le seul but était de définir un ensemble de supports pour que d'autres fragments puissent être ancrés à. Lors de l'ajout de Fragments supplémentaires à l'activité après ce point, j'ai utilisé le titulaire du lieu de vue du Fragment de modèle +@id s pour identifier l' +@id de la "racine" ou de la vue parentale pour le Fragment ajouté.

      getSupportFragmentManager().beginTransaction().add(#someIdFromTheTemplateFrag, fragment, fragmentTag).commit(); 

    Le Fragment que j'avais ajouté savait alors où s'armer dans la mise en page actuelle et, bien sûr, il s'agissait d'une manière joyeuse d'ajouter sa vue. Cela a eu pour effet d'attacher un Fragment à un autre fragment, ce qui a permis d'obtenir la «nidification» visuelle souhaitée …

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.