Qu'est-ce que «tools: context» dans les fichiers de mise en page Android?

937

À partir d'une nouvelle version récente d'ADT, j'ai remarqué ce nouvel attribut sur les fichiers XML de mise en page, par exemple:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" />

À quoi sert «outils: contexte»?

Comment sait-il même le chemin exact vers l'activité qui y est écrite? Regarde-t-il le package de l'application, à l'intérieur du manifeste?

Est-ce limité aux classes qui étendent le contexte ou uniquement aux activités? Est-il utilisable pour les éléments ListView, etc.?

développeur android
la source
oui, je me demande ce que j'ai manqué d'autre (sans le voir dans les sections "Quoi de neuf") puisque j'installe toujours la dernière des dernières versions adt & sdk (actuellement en utilisant adt & sdk 20 preview 3).
développeur Android
9
Jetez également un œil aux documents officiels ici: < tools.android.com/tech-docs/tools-attributes#TOC-tools:context >.
MDTech.us_MAN
2
Mon application fonctionne toujours sans contexte.
plus vénérable monsieur le
1
@ user132522 Tout est question de développement, dans l'IDE lui-même. Pas pour l'exécution de l'application
développeur Android

Réponses:

440

Il s'agit de l'activité que l'éditeur d'outils d'interface utilisateur utilise pour rendre l'aperçu de votre présentation. Il est documenté ici :

Cet attribut déclare à quelle activité cette disposition est associée par défaut. Cela active des fonctionnalités dans l'éditeur ou l'aperçu de la mise en page qui nécessitent une connaissance de l'activité, telles que le thème de la mise en page dans l'aperçu et où insérer les gestionnaires onClick lorsque vous les créez à partir d'un quickfix

Nikolay Elenkov
la source
je vois . selon la capture d'écran ici: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/… , cela signifie que cela ne doit pas être une classe qui étend le contexte, non? si c'est le cas, je pense que cela fait plus que ce que vous dites, mais je ne sais pas quoi.
développeur Android
2
Activitys'étend Context, donc vous ne savez pas ce que vous voulez dire? Il pourrait faire plus en effet, si vous êtes intéressé, vérifiez le code source, il est disponible. Je ne connais aucun détail.
Nikolay Elenkov
Oops . je n'ai pas lu correctement le texte de la capture d'écran. en survolant ce que j'ai montré, cela dit aussi que ça peut être un fragment, mais les fragments n'ont leur thème écrit nulle part, non? de toute façon, je ne sais toujours pas à quoi sert ce nouvel attribut. je me demande si le nouveau google io en parlera.
développeur Android
25
ils ont fait une nouvelle vidéo qui montre ces fonctionnalités: youtube.com/…
développeur Android
1
dernier lien de documentation developer.android.com/studio/write/tool-attributes.html
Clive Sargeant
380

Cet attribut est essentiellement la persistance de la sélection "Activité associée" au-dessus de la disposition. Au moment de l'exécution, une présentation est toujours associée à une activité. Il peut bien sûr être associé à plusieurs, mais au moins un. Dans l'outil, nous devons connaître ce mappage (qui au moment de l'exécution se produit dans l'autre sens; une activité peut appeler setContentView (mise en page) pour afficher une mise en page) afin de piloter certaines fonctionnalités.

À l'heure actuelle, nous ne l'utilisons que pour une seule chose: choisir le bon thème à afficher pour une mise en page (puisque le fichier manifeste peut enregistrer des thèmes à utiliser pour une activité , et une fois que nous connaissons l'activité associée à la mise en page, nous pouvons choisir le bon thème à afficher pour la mise en page). À l'avenir, nous l'utiliserons pour générer des fonctionnalités supplémentaires - telles que le rendu de la barre d'action (qui est associée à l'activité), un endroit pour ajouter des gestionnaires OnClick, etc.

La raison pour laquelle il s'agit d'un attribut tools: namespace est qu'il ne s'agit que d'un mappage au moment du design à utiliser par l'outil. La mise en page elle-même peut être utilisée par plusieurs activités / fragments, etc. Nous voulons simplement vous donner un moyen de choisir une liaison de conception telle que nous pouvons par exemple montrer le bon thème; vous pouvez le modifier à tout moment, tout comme vous pouvez modifier notre liste et nos liaisons de fragments, etc.

(Voici l'ensemble de modifications complet qui contient plus de détails à ce sujet )

Et oui, le lien Nikolay répertorié ci-dessus montre à quoi ressemble le nouveau sélecteur de configuration et fonctionne

Encore une chose: l'espace de noms "tools" est spécial. L'outil de packaging Android sait l'ignorer, donc aucun de ces attributs ne sera inclus dans l'APK. Nous l'utilisons pour des métadonnées supplémentaires dans la mise en page. C'est aussi où par exemple les attributs pour supprimer les avertissements de peluches sont stockés - comme outils: ignorer.

Tor Norbye
la source
comment connaît-il le chemin d'accès complet à l'activité s'il n'a pas de package de base? regarde-t-il le fichier manifeste?
développeur Android
2
Oui, il le traite de la même manière que les enregistrements d'activité dans le fichier manifeste, où vous pouvez également omettre le package dans l'attribut name. Il ajoute la déclaration de package à partir de l'élément racine du fichier manifeste, si nécessaire.
Tor Norbye
agréable . tout cela (et plus) sera-t-il présenté lors de google io 2012? j'ai hâte d'entendre parler des nouvelles fonctionnalités. :)
développeur android
1
Dans le XML généré pour un nouveau projet, il met la tools:contextvaleur sur le TextViewterrain. Comme cela ressemble à un cas d'utilisation global pour appliquer un thème à la mise en page entière, pourquoi n'est-il pas placé dans la mise en page racine?
Jason Robinson
3
J'ai ajouté un document qui documente nos attributs d'outils actuels: tools.android.com/tech-docs/tools-attributes
Tor Norbye
92

Selon le site du projet Android Tools :

outils: contexte

Cet attribut est généralement défini sur l'élément racine dans un fichier XML de mise en page et enregistre l'activité à laquelle la mise en page est associée (au moment du design, car une mise en page peut évidemment être utilisée par plusieurs mises en page). Cela sera par exemple utilisé par l'éditeur de mise en page pour deviner un thème par défaut, car les thèmes sont définis dans le manifeste et sont associés à des activités, pas à des mises en page. Vous pouvez utiliser le même préfixe de point que dans les manifestes pour simplement spécifier la classe d'activité sans le nom complet du package d'application comme préfixe.

<android.support.v7.widget.GridLayout
    xmlns:android="http://schemas.android.com/apk/res/android"    
    xmlns:tools="http://schemas.android.com/tools"
    tools:context=".MainActivity">  

Utilisé par: les éditeurs de mise en page dans Studio & Eclipse, Lint

un autre codeur
la source
14

1. description

tools: context = "activity name"il ne sera pas emballé dans le apk.Seulement ADTEditor Mise en page dans votre jeu en cours de fichier mise en page contexte de rendu correspondant, montrer votre mise en page en cours dans le rendu le contexte est le nom de l' activité correspond à l'activité, si l'activité dans le manifestfichier défini un thème, puis ADTL'éditeur de mise en page rendra votre mise en page actuelle en fonction du thème, ce qui signifie que si vous MainActivitydéfinissez un thème. La lumière (l'autre), alors vous voyez dans le gestionnaire de disposition visuelle o le contrôle d'arrière-plan de ce qui devrait être le thème. La lumière ressemble à seulement ce que vous voyez est ce que vous obtenez des résultats.

Certaines personnes le comprendront, d'autres le verront également ne sais pas, j'ajouterai quelques mots d'explication:

2. échantillon

Prenez une image simple tools:text, par exemple, un peu plus, pratique pour mieux comprendre letools:context

<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="sample name1" />

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    tools:text="sample name2" />

entrez la description de l'image ici

TextView1 a adopté le android: text, et utilisez le tools:textdans le TextView2, sur le côté droit de l'éditeur de mise en page affichera le sample name1, les sample name2deux polices, si après avoir exécuté le code à compiler, généré apk, le terminal n'affiche que le sample name1, n'affiche pas sample name2les mots. Vous pouvez essayer de courir, voir comment l'effet.

3. description spécifique

1.Il tools: context = "activity name"ne sera pas emballé dans le apk(compréhension: l'équivalent de ceci est commenté, aucun effet compilé.)

2.Seulement l' ADTéditeur de mise en page (c'est-à-dire pour l'icône ci-dessus sur le côté droit du simulateur) dans le contexte de rendu du jeu de fichiers de mise en page correspondant, la mise en page du XML actuel dans le rendu du contexte est le nom de l'activité correspond à l'activité, si l'activité dans le fichier manifeste définit un thème, puis l' ADTéditeur de disposition rendra votre disposition actuelle en fonction du thème. Cela signifie que si vous définissez l' MainActivityensemble un thème. La lumière peut également être (autre). (Comprenez: vous avez ajouté tools: context = "activity name", la disposition XML rend l'activité spécifiée, établit un thème dans le fichier manifeste, illustré ci-dessus à droite. Le style du thème du simulateur suivra également les modifications correspondant au thème.)

4. résumé

Pour résumer, ces propriétés visent principalement au-dessus des bons outils, l'état d'affichage du temps de débogage du simulateur et la compilation ne fonctionnent pas,

KeLiuyue
la source
7

«Tools: context» est l'un des attributs de conception qui peuvent faciliter la création de disposition en XML dans le cadre de développement. Cet attribut est utilisé pour montrer au framework de développement quelle classe d'activité est choisie pour implémenter la mise en page. En utilisant «tools: context», Android Studio choisit automatiquement le thème nécessaire pour l'aperçu.

Si vous souhaitez en savoir plus sur d'autres attributs et outils utiles pour le développement d'applications Android, jetez un œil à cette revue: http://cases.azoft.com/4-must-know-tools-for-effective-android -développement/

Mihir Patel
la source
3

C'est la meilleure solution: https://developer.android.com/studio/write/tool-attributes

Il s'agit d'attributs de conception, nous pouvons définir le contexte d'activité en XML comme

tools:context=".activity.ActivityName"

Adaptateur:

tools:context="com.PackegaName.AdapterName"

entrez la description de l'image ici

Vous pouvez accéder à la classe java en cliquant sur l'icône marquée et les outils ont plus de fonctionnalités comme

tools:text=""
tools:visibility:""
tools:listItems=""//for recycler view 

etx

Ashik Azeez
la source
0

tools:context=".MainActivity" cette ligne est utilisée dans un fichier xml qui indique quel fichier source java est utilisé pour accéder à ce fichier xml. cela signifie afficher cet aperçu xml pour les fichiers java perticular.

Nikita Prajapati
la source