Che cosa sono gli "strumenti: contesto" nei file di layout Android?


937

A partire da una nuova versione recente di ADT, ho notato questo nuovo attributo nei file XML del layout, ad esempio:

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

A cosa servono gli "strumenti: contesto"?

Come fa a sapere il percorso esatto dell'attività che è scritta lì? Guarda il pacchetto dell'app, all'interno del manifest?

È limitato alle classi che estendono il contesto o solo le attività? È utilizzabile per gli oggetti ListView ecc.?


si, mi chiedo cos'altro mi sono perso (senza vederlo nelle sezioni "novità") poiché installo sempre l'ultima delle ultime versioni di adt & sdk (attualmente utilizzo adt & sdk 20 preview 3).
sviluppatore Android il

9
Inoltre, dai un'occhiata ai documenti ufficiali qui: < tools.android.com/tech-docs/tools-attributes#TOC-tools:context >.
MDTech.us_MAN

2
La mia app funziona ancora senza contesto.
più venerabile signore,

1
@ user132522 Si tratta di sviluppo, nell'IDE stesso. Non per quando si esegue l'app
sviluppatore Android

Risposte:


440

Questa è l'attività utilizzata dall'editor dell'interfaccia utente degli strumenti per eseguire il rendering dell'anteprima del layout. È documentato qui :

Questo attributo dichiara a quale attività questo layout è associato per impostazione predefinita. Ciò consente funzionalità nell'editor o nell'anteprima del layout che richiedono la conoscenza dell'attività, come ad esempio quale tema del layout dovrebbe essere nell'anteprima e dove inserire i gestori onClick quando si effettuano questi da una correzione rapida


Vedo . secondo lo screenshot qui: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/… , significa che non deve essere una classe che estende il contesto, giusto? in tal caso, penso che faccia di più di quello che stai dicendo, anche se non sono sicuro di cosa.
sviluppatore Android il

2
Activitysi estende Context, quindi non sei sicuro di cosa intendi? Potrebbe essere più efficace, se sei interessato, controlla il codice sorgente, è disponibile. Non conosco nessun dettaglio.
Nikolay Elenkov il

oops. non ho letto correttamente il testo dello screenshot .scusa. quando passi sopra quello che ho mostrato, dice anche che può essere un frammento, ma i frammenti non hanno il loro tema scritto da nessuna parte, no? comunque, non sono ancora sicuro di cosa sia questo nuovo attributo. mi chiedo se il nuovo google io parlerà di questo.
sviluppatore Android il

25
hanno realizzato un nuovo video che mostra queste caratteristiche: youtube.com/…
sviluppatore Android il


380

Tale attributo è fondamentalmente la persistenza per la selezione "Attività associata" sopra il layout. In fase di esecuzione, un layout è sempre associato a un'attività. Naturalmente può essere associato a più di uno, ma almeno a uno. Nello strumento, dobbiamo conoscere questa mappatura (che in fase di esecuzione avviene nell'altra direzione; un'attività può chiamare setContentView (layout) per visualizzare un layout) al fine di guidare determinate funzionalità.

In questo momento, lo stiamo usando solo per una cosa: scegliere il tema giusto da mostrare per un layout (poiché il file manifest può registrare temi da utilizzare per un'attività e una volta che conosciamo l'attività associata al layout, possiamo scegliere il tema giusto da mostrare per il layout). In futuro, useremo questo per guidare funzionalità aggiuntive, come il rendering della barra delle azioni (che è associata all'attività), un posto dove aggiungere gestori onClick, ecc.

Il motivo per cui si tratta di uno strumento: l'attributo namespace è che questa è solo una mappatura in fase di progettazione per l'utilizzo da parte dello strumento. Il layout stesso può essere utilizzato da più attività / frammenti, ecc. Vogliamo solo darti un modo per scegliere un'associazione in fase di progettazione in modo tale che, ad esempio, possiamo mostrare il tema giusto; puoi cambiarlo in qualsiasi momento, proprio come puoi cambiare i nostri collegamenti listview e frammenti, ecc.

(Ecco il changeset completo che ha maggiori dettagli su questo )

E sì, il link Nikolay elencato sopra mostra l'aspetto e il funzionamento del nuovo selettore di configurazione

Ancora una cosa: lo spazio dei nomi "strumenti" è speciale. Lo strumento di packaging Android sa di ignorarlo, quindi nessuno di questi attributi verrà impacchettato nell'APK. Lo stiamo usando per metadati extra nel layout. È anche dove, ad esempio, sono memorizzati gli attributi per sopprimere gli avvisi di lanugine - come strumenti: ignora.


come fa a conoscere il percorso completo dell'attività se non ha un pacchetto base? guarda il file manifest?
sviluppatore Android

2
Sì, lo tratta allo stesso modo delle registrazioni di attività nel file manifest, dove è anche possibile omettere il pacchetto nell'attributo name. Anticipa la dichiarazione del pacchetto dall'elemento root del file manifest, se necessario.
Tor Norbye,

simpatico . tutto questo (e altro) sarà mostrato a google io 2012? non vedo l'ora di conoscere le nuove funzionalità. :)
sviluppatore Android il

1
Nell'XML generato per un nuovo progetto mette il tools:contextvalore sul TextViewcampo. Dal momento che sembra un caso d'uso globale per applicare un tema all'intero layout, perché non viene inserito nel layout radice?
Jason Robinson,

3
Ho aggiunto un documento che documenta gli attributi dei nostri attuali strumenti: tools.android.com/tech-docs/tools-attributes
Tor Norbye

92

Secondo il sito del progetto Strumenti Android :

Strumenti: contesto

Questo attributo è in genere impostato sull'elemento radice in un file XML di layout e registra a quale attività è associato il layout (in fase di progettazione, poiché ovviamente un layout può essere utilizzato da più di un layout). Ad esempio, questo verrà utilizzato dall'editor di layout per indovinare un tema predefinito, poiché i temi sono definiti nel Manifesto e associati ad attività, non a layout. È possibile utilizzare lo stesso prefisso punto dei manifest per specificare semplicemente la classe di attività senza il nome del pacchetto completo dell'applicazione come prefisso.

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

Utilizzato da: editor di layout in Studio & Eclipse, Lint


14

1.Description

tools: context = "activity name"non verrà impacchettato apknell'Editor di ADTlayout. Solo nel tuo file di layout corrente imposta il contesto di rendering corrispondente, mostra il tuo layout attuale nel rendering del contesto è il nome dell'attività corrisponde all'attività, se l'attività nel manifestfile imposta un tema, quindi ADTLayout Editor visualizzerà il tuo layout attuale in base al MainActivitytema. Significa che se imposti un set di temi. La luce (l'altra), quindi vedi in Gestione layout visivo o controllo di sfondo di quello che dovrebbe essere il tema. Sembra che la Luce. Solo per mostrarti ciò che vedi è ciò che ottieni risultati.

Alcune persone vedono capiranno alcune, alcune persone vedranno anche non lo so, aggiungerò alcune parole di spiegazione:

2.Sample

Prendi un semplice tools:text, ad esempio, qualche immagine in più, conveniente per capire ulteriormente iltools: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" />

inserisci qui la descrizione dell'immagine

TextView1 ha adottato il android: text, e usa il tools:textin TextView2, sul lato destro dell'editor del layout mostrerà il sample name1, i sample name2due caratteri, se dopo aver eseguito il codice per compilare, generato apk, il terminale visualizza solo il sample name1, non mostra sample name2le parole. Puoi provare a correre, guarda come l'effetto.

3.Descrizione specifica

1.Il tools: context = "activity name"non sarà impacchettato in apk(comprensione: l'equivalente di questo è commentato, la compilazione non ha alcun effetto.)

2.Solo ADTEditor di layout (ovvero, per l'icona sopra sul lato destro del simulatore) nel file di layout corrente impostare il contesto di rendering corrispondente, il layout dell'XML corrente nel rendering del contesto è il nome dell'attività corrisponde all'attività, se l'attività nel file manifest imposta un tema, quindi ADTEditor layout renderà il tuo layout corrente in base al MainActivitytema. Significa che se imposti un tema. La luce può anche essere (altro) (capire: hai aggiunto tools: context = "activity name", il layout XML sta eseguendo il rendering dell'attività specificata, stabilisce un tema nel file manifest, nella foto in alto a destra lo stile del tema del simulatore seguirà anche le modifiche corrispondenti al tema.)

4.summary

Riassumendo, queste proprietà miravano principalmente sopra gli strumenti giusti, lo stato di visualizzazione del tempo di debug del simulatore e la compilazione non funziona,


7

"Tools: context" è uno degli attributi di progettazione che può facilitare la creazione di layout in XML nel framework di sviluppo. Questo attributo viene utilizzato per mostrare al framework di sviluppo quale classe di attività viene scelta per l'implementazione del layout. Utilizzando "strumenti: contesto", Android Studio sceglie automaticamente il tema necessario per l'anteprima.

Se desideri saperne di più su alcuni altri attributi e strumenti utili per lo sviluppo di app Android, dai un'occhiata a questa recensione: http://cases.azoft.com/4-must-know-tools-for-effective-android -sviluppo/


3

Questa è la soluzione migliore: https://developer.android.com/studio/write/tool-attributes

Questi sono gli attributi di progettazione che possiamo impostare come contesto di attività in xml come

tools:context=".activity.ActivityName"

Adattatore:

tools:context="com.PackegaName.AdapterName"

inserisci qui la descrizione dell'immagine

Puoi passare alla classe java quando fai clic sull'icona contrassegnata e gli strumenti hanno più funzioni come

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

ETX


0

tools:context=".MainActivity" thisline viene utilizzato nel file xml che indica quale file sorgente Java viene utilizzato per accedere a questo file xml. significa che mostra questa anteprima xml per i file java perticolari.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.