Principes Fondamentaux De L’interface Utilisateur Android
Tous les composants visuels sous Android descendent de la classe View et sont appelés de manière générique Vues. Vous verrez souvent des vues appelées commandes ou widgets (à ne pas confondre avec les widgets de l’écran d’accueil décrits dans le Chapitre 19, «Envahissement de l’écran d’accueil») - termes avec lesquels vous êtes probablement familier si vous avez déjà développé une interface graphique d'autres plates-formes.
La classe ViewGroup est une extension de View qui prend en charge l’ajout de vues enfant (généralement appelées enfants). Les groupes de vues sont chargés de décider de la taille de chaque vue enfant et de déterminer leurs positions. Les groupes de vues qui se concentrent principalement sur la disposition des enfants sont appelés des dispositions.
Les groupes de vues sont des vues. Par conséquent, comme toute autre vue, ils peuvent également dessiner leur propre interface utilisateur personnalisée et gérer les interactions des utilisateurs.
Les vues et les groupes de vues inclus dans le SDK Android fournissent les composants dont vous avez besoin pour créer une interface utilisateur efficace et accessible. Vous pouvez créer et organiser vos vues dans votre interface utilisateur par programme, mais il est vivement recommandé d'utiliser des ressources de présentation XML pour créer et construire votre interface utilisateur. Cette approche permet de spécifier différentes dispositions optimisées pour différentes configurations matérielles, notamment les variations de taille d'écran, voire de les modifier au moment de l'exécution en fonction des modifications apportées au matériel (telles que les modifications d'orientation).
Chaque vue contient un ensemble d'attributs XML qui vous permettent de définir son état initial à partir de votre ressource de présentation. Par exemple, pour définir le texte sur un TextView, vous devez définir l’attribut android : text.
Dans les sections suivantes, vous apprendrez à assembler des interfaces utilisateur de plus en plus complexes avant de se familiariser avec Fragments, les vues disponibles dans le SDK, comment étendre ces vues, construire vos propres contrôles composés et créer vos propres vues personnalisées.
Affectation d'interfaces utilisateur à des activités
Une nouvelle activité commence par un écran invitant et vide, sur lequel vous pouvez placer votre interface utilisateur. Pour ce faire, appelez setContentView en transmettant l'instance de View ou la ressource de présentation à afficher.
Un écran vide manque de l’attrait viscéral requis par les utilisateurs avertis d’aujourd’hui. Vous utiliserez donc presque toujours setContentView pour attribuer l’UI d’une activité lors de la substitution de son gestionnaire onCreate. Étant donné que la méthode setContentView accepte un ID de ressource de présentation ou une instance de View unique à la racine de votre hiérarchie de vues, vous pouvez définir votre interface utilisateur soit en code, soit en utilisant la technique recommandée des ressources de présentation externes:
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
L'utilisation des ressources de présentation vous permet de découpler la couche de présentation de la logique d'application, ce qui vous permet de modifier la présentation sans modifier le code. Cela permet de spécifier différentes dispositions optimisées pour différentes configurations matérielles, voire de les modifier au moment de l'exécution en fonction des modifications apportées au matériel (telles que les modifications d'orientation de l'écran).
Une fois la mise en page définie, vous pouvez obtenir une référence à chacune des vues qu’elle contient à l’aide de la méthode findViewById:
TextView myTextView = findViewById (R.id.myTextView);
Si vous utilisez des fragments pour encapsuler des parties de l'interface utilisateur de votre activité, la vue définie dans votre
Le gestionnaire onCreate d’Activity sera une présentation qui décrit la position relative de chacun de vos fragments (ou de leurs conteneurs). L'interface utilisateur utilisée pour chaque fragment est définie dans sa propre disposition et est gonflée dans le fragment lui-même et doit, dans presque tous les cas, être traitée uniquement par ce fragment.