Was ist "Tools: Kontext" in Android-Layoutdateien?

937

Beginnend mit einer neuen Version von ADT habe ich dieses neue Attribut in den Layout-XML-Dateien festgestellt, zum Beispiel:

<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" />

Wofür wird "tools: context" verwendet?

Woher kennt es überhaupt den genauen Weg zu der dort geschriebenen Aktivität? Betrachtet es das Paket der App im Manifest?

Ist es auf Klassen beschränkt, die den Kontext erweitern, oder nur auf Aktivitäten? Ist es für ListView-Elemente usw. verwendbar?

Android-Entwickler
quelle
Ja, ich frage mich, was ich sonst noch vermisst habe (ohne es in den Abschnitten "Was ist neu" zu sehen), da ich immer die neueste der neuesten adt & sdk-Versionen installiere (derzeit mit adt & sdk 20 Vorschau 3).
Android-Entwickler
9
Schauen Sie sich auch die offiziellen Dokumente hier an: < tools.android.com/tech-docs/tools-attributes#TOC-tools:context >.
MDTech.us_MAN
2
Meine App funktioniert immer noch ohne Kontext.
ehrwürdigster Herr
1
@ user132522 In der IDE selbst dreht sich alles um die Entwicklung. Nicht für die Ausführung der App
Android-Entwickler

Antworten:

440

Dies ist die Aktivität, mit der der UI-Editor der Tools Ihre Layoutvorschau rendert. Es ist hier dokumentiert :

Dieses Attribut gibt an, welcher Aktivität dieses Layout standardmäßig zugeordnet ist. Dies ermöglicht Funktionen im Editor oder in der Layoutvorschau, die Kenntnisse über die Aktivität erfordern, z. B. was das Layoutthema in der Vorschau sein soll und wo onClick-Handler eingefügt werden sollen, wenn Sie diese aus einem Quickfix erstellen

Nikolay Elenkov
quelle
Aha . Laut Screenshot hier: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/… bedeutet dies, dass es sich nicht um eine Klasse handeln muss, die den Kontext erweitert, oder? Wenn ja, denke ich, dass es mehr tut als das, was Sie sagen, obwohl ich nicht sicher bin, was.
Android-Entwickler
2
Activityerweitert Context, also nicht sicher, was du meinst? Wenn Sie interessiert sind, überprüfen Sie möglicherweise den Quellcode, er ist verfügbar. Ich kenne keine Details.
Nikolay Elenkov
Hoppla . Ich habe den Text des Screenshots nicht richtig gelesen. Wenn ich über das, was ich gezeigt habe, schwebe, heißt es auch, dass es ein Fragment sein kann, aber Fragmente haben ihr Thema nirgendwo geschrieben, oder? Trotzdem bin ich mir immer noch nicht sicher, wofür dieses neue Attribut ist. Ich frage mich, ob das neue Google Io davon erzählen wird.
Android-Entwickler
25
Sie haben ein neues Video gemacht, das diese Funktionen zeigt: youtube.com/…
Android-Entwickler
1
Link zur
Clive Sargeant
380

Dieses Attribut ist im Grunde die Persistenz für die Auswahl "Zugehörige Aktivität" über dem Layout. Zur Laufzeit ist ein Layout immer einer Aktivität zugeordnet. Es kann natürlich mit mehr als einem, aber mindestens einem verbunden sein. Im Tool müssen wir über diese Zuordnung Bescheid wissen (die zur Laufzeit in die andere Richtung erfolgt; eine Aktivität kann setContentView (Layout) aufrufen, um ein Layout anzuzeigen), um bestimmte Funktionen zu steuern.

Im Moment verwenden wir es nur für eine Sache: Auswählen des richtigen Themas für ein Layout (da die Manifestdatei Themen registrieren kann, die für eine Aktivität verwendet werden sollen , und sobald wir die mit dem Layout verbundene Aktivität kennen, können wir auswählen das richtige Thema für das Layout). In Zukunft werden wir dies verwenden, um zusätzliche Funktionen zu steuern - z. B. das Rendern der Aktionsleiste (die der Aktivität zugeordnet ist), einen Ort zum Hinzufügen von onClick-Handlern usw.

Der Grund dafür, dass es sich um ein Tools: Namespace-Attribut handelt, ist, dass dies nur eine Entwurfszeitzuordnung zur Verwendung durch das Tool ist. Das Layout selbst kann von mehreren Aktivitäten / Fragmenten usw. verwendet werden. Wir möchten Ihnen nur die Möglichkeit geben, eine Design-Bindungsbindung auszuwählen, damit wir beispielsweise das richtige Thema anzeigen können. Sie können es jederzeit ändern, genauso wie Sie unsere Listenansicht und Fragmentbindungen usw. ändern können.

(Hier ist der vollständige Änderungssatz, der weitere Details dazu enthält. )

Und ja, der oben aufgeführte Link Nikolay zeigt, wie die neue Konfigurationsauswahl aussieht und funktioniert

Noch etwas: Der Namespace "tools" ist etwas Besonderes. Das Android-Packaging-Tool kann es ignorieren, sodass keines dieser Attribute in die APK gepackt wird. Wir verwenden es für zusätzliche Metadaten im Layout. Hier werden beispielsweise auch die Attribute zur Unterdrückung von Flusenwarnungen gespeichert - als Tools: Ignorieren.

Tor Norbye
quelle
Woher kennt es den vollständigen Pfad zur Aktivität, wenn es kein Basispaket hat? Schaut es sich die Manifestdatei an?
Android-Entwickler
2
Ja, es wird genauso behandelt wie Aktivitätsregistrierungen in der Manifestdatei, wobei Sie das Paket auch im Attribut name weglassen können. Falls erforderlich, wird die Paketdeklaration aus dem Stammelement der Manifestdatei vorangestellt.
Tor Norbye
nett . Wird all dies (und mehr) auf Google Io 2012 gezeigt? Ich kann es kaum erwarten, von den neuen Funktionen zu hören. :)
Android-Entwickler
1
Im generierten XML für ein neues Projekt wird der tools:contextWert in das TextViewFeld eingefügt. Da dies wie ein globaler Anwendungsfall zum Anwenden eines Themas auf das gesamte Layout klingt, warum wird es nicht im Root-Layout platziert?
Jason Robinson
3
Ich habe ein Dokument hinzugefügt, das unsere aktuellen Werkzeugattribute dokumentiert: tools.android.com/tech-docs/tools-attributes
Tor Norbye
92

Laut der Android Tools Project Site :

Werkzeuge: Kontext

Dieses Attribut wird normalerweise für das Stammelement in einer Layout-XML-Datei festgelegt und zeichnet auf, welcher Aktivität das Layout zugeordnet ist (zur Entwurfszeit, da ein Layout offensichtlich von mehr als einem Layout verwendet werden kann). Dies wird beispielsweise vom Layout-Editor verwendet, um ein Standardthema zu erraten, da Themen im Manifest definiert und Aktivitäten und nicht Layouts zugeordnet sind. Sie können dasselbe Punktpräfix wie in Manifesten verwenden, um nur die Aktivitätsklasse ohne den vollständigen Namen des Anwendungspakets als Präfix anzugeben.

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

Verwendet von: Layout-Editoren in Studio & Eclipse, Lint

ein anderer Codierer
quelle
14

1. Beschreibung

tools: context = "activity name"Es wird nicht in den apk.Only ADTLayout Editor in Ihrem aktuellen Layout- Dateisatz entsprechend dem Rendering-Kontext gepackt. Zeigen Sie Ihr aktuelles Layout beim Rendern des Kontexts an. Der Aktivitätsname entspricht der Aktivität. Wenn die Aktivität in der manifestDatei ein Thema festlegt, dann ADTDer Layout-Editor rendert Ihr aktuelles Layout gemäß dem MainActivityThema. Bedeutet dies, wenn Sie das Set als Thema festlegen. Das Licht (das andere), dann sehen Sie im visuellen Layout-Manager die Hintergrundsteuerung, was das Thema sein soll. Das Licht sieht aus wie. Nur um Ihnen zu zeigen, was Sie sehen, erhalten Sie Ergebnisse.

Einige Leute sehen, werden andere verstehen, andere sehen, dass sie es auch nicht wissen, ich werde ein paar erklärende Worte hinzufügen:

2. Probe

Nehmen Sie tools:textzum Beispiel ein einfaches , etwas mehr Bild, um das besser zu verstehentools: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" />

Geben Sie hier die Bildbeschreibung ein

TextView1 übernahm die android: text, und verwenden Sie die tools:textin der TextView2, auf der rechten Seite des Layout-Editors werden sample name1die sample name2beiden Schriftarten angezeigt , wenn nach dem Ausführen des Codes zum Kompilieren, Generieren apk, Terminal-Anzeigen nur die sample name1, sample name2die Wörter nicht angezeigt werden . Sie können versuchen zu laufen, um zu sehen, wie sich das auswirkt.

3. Spezifische Beschreibung

1.Das tools: context = "activity name"wird nicht in das verpackt apk(Verständnis: das Äquivalent dazu wird kommentiert, das kompiliert keine Wirkung.)

2.Nur der ADTLayout-Editor (dh für das obige Symbol auf der rechten Seite des Simulators) in der aktuellen Layout-Datei den entsprechenden Rendering-Kontext festlegen. Das Layout des aktuellen XML beim Rendern des Kontexts ist der Aktivitätsname, der der Aktivität entspricht, wenn ADTWenn die Aktivität in der Manifestdatei ein Thema festlegt, rendert der Layout-Editor Ihr aktuelles Layout gemäß dem MainActivityThema. Bedeutet dies, wenn Sie ein Thema festlegen. Das Licht kann auch (anderes) sein. (Verstehen Sie: Sie haben hinzugefügt tools: context = "activity name", das XML-Layout rendert eine bestimmte Aktivität, erstellt ein Thema in der Manifestdatei. Der oben rechts abgebildete Simulator-Themenstil folgt auch Änderungen, die dem Thema entsprechen.)

4.Zusammenfassung

Zusammenfassend lässt sich sagen, dass diese Eigenschaften hauptsächlich auf die richtigen Tools abzielen, dass der Status der Debugging-Zeit des Simulators angezeigt wird und das Kompilieren nicht funktioniert.

KeLiuyue
quelle
7

"Tools: context" ist eines der Designattribute, die die Layouterstellung in XML im Entwicklungsframework erleichtern können. Dieses Attribut wird verwendet, um dem Entwicklungsframework anzuzeigen, welche Aktivitätsklasse für die Implementierung des Layouts ausgewählt wurde. Mit „tools: context“ wählt Android Studio automatisch das erforderliche Thema für die Vorschau aus.

Wenn Sie mehr über einige andere Attribute und nützliche Tools für die Entwicklung von Android-Apps erfahren möchten, lesen Sie diese Rezension: http://cases.azoft.com/4-must-know-tools-for-effective-android -Entwicklung/

Mihir Patel
quelle
3

Dies ist die beste Lösung: https://developer.android.com/studio/write/tool-attributes

Dies sind Designattribute, mit denen wir den Aktivitätskontext in XML wie einstellen können

tools:context=".activity.ActivityName"

Adapter:

tools:context="com.PackegaName.AdapterName"

Geben Sie hier die Bildbeschreibung ein

Sie können zur Java-Klasse navigieren, wenn Sie auf das markierte Symbol klicken. Werkzeuge verfügen über weitere Funktionen wie

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

etx

Ashik Azeez
quelle
0

tools:context=".MainActivity" Diese Zeile wird in einer XML-Datei verwendet, die angibt, welche Java-Quelldatei für den Zugriff auf diese XML-Datei verwendet wird. Dies bedeutet, dass diese XML-Vorschau für bestimmte Java-Dateien angezeigt wird.

Nikita Prajapati
quelle