O que é "ferramentas: contexto" nos arquivos de layout do Android?

937

Começando com uma nova versão recente do ADT, notei esse novo atributo nos arquivos XML de layout, por exemplo:

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

Para que é utilizado "tools: context"?

Como ele sabe o caminho exato para a atividade que está escrita lá? Ele analisa o pacote do aplicativo, dentro do manifesto?

É limitado a classes que estendem o Contexto ou apenas atividades? É utilizável para itens do ListView, etc.?

desenvolvedor android
fonte
Sim, gostaria de saber o que mais eu perdi (sem vê-lo nas seções "O que há de novo"), pois sempre instalo as últimas versões mais recentes do adt & sdk (atualmente usando o adt & sdk 20 preview 3).
desenvolvedor android
9
Além disso, consulte os documentos oficiais aqui: < tools.android.com/tech-docs/tools-attributes#TOC-tools:context >.
MDTech.us_MAN 23/03
2
Meu aplicativo ainda funciona sem contexto.
veneradíssimo senhor
1
@ user132522 É tudo sobre desenvolvimento, no próprio IDE. Não é para executar o aplicativo
desenvolvedor Android

Respostas:

440

Essa é a atividade que o editor da interface do usuário das ferramentas usa para renderizar a visualização do layout. Está documentado aqui :

Este atributo declara a qual atividade esse layout está associado por padrão. Isso habilita os recursos no editor ou na visualização do layout que exigem conhecimento da atividade, como qual o tema do layout na visualização e onde inserir manipuladores onClick quando você faz um de uma correção rápida

Nikolay Elenkov
fonte
eu vejo . de acordo com a captura de tela aqui: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/… , significa que não precisa ser uma classe que estenda o Contexto, certo? Nesse caso, acho que faz mais do que você está dizendo, embora não tenha certeza do que.
desenvolvedor android
2
Activityestende Context, então não tem certeza do que você quer dizer? Pode estar fazendo muito mais, se você estiver interessado, verifique o código fonte, está disponível. Não conheço nenhum detalhe.
Nikolay Elenkov
oops. não li o texto da imagem corretamente. desculpe. ao passar o mouse sobre o que mostrei, também diz que pode ser um fragmento, mas os fragmentos não têm o tema escrito em nenhum lugar, não? de qualquer forma, ainda não sei para que serve esse novo atributo. pergunto se o novo google io dirá sobre isso.
desenvolvedor android
25
eles fizeram um novo vídeo que mostra esses recursos: youtube.com/…
desenvolvedor android
1
link da documentação mais recente developer.android.com/studio/write/tool-attributes.html
Clive Sargeant
380

Esse atributo é basicamente a persistência da seleção "Atividade Associada" acima do layout. No tempo de execução, um layout é sempre associado a uma atividade. Obviamente, pode estar associado a mais de um, mas pelo menos um. Na ferramenta, precisamos saber sobre esse mapeamento (que em tempo de execução acontece na outra direção; uma atividade pode chamar setContentView (layout) para exibir um layout) para gerar determinados recursos.

No momento, estamos usando apenas uma coisa: Escolher o tema certo a ser exibido para um layout (já que o arquivo de manifesto pode registrar temas a serem usados ​​em uma atividade e, uma vez que conhecemos a atividade associada ao layout, podemos escolher o tema certo a ser mostrado para o layout). No futuro, usaremos isso para gerar recursos adicionais - como renderizar a barra de ação (que está associada à atividade), um local para adicionar manipuladores de clique, etc.

A razão pela qual este é um atributo tools: namespace é que este é apenas um mapeamento em tempo de design para uso da ferramenta. O layout em si pode ser usado por várias atividades / fragmentos, etc. Queremos apenas dar uma maneira de escolher uma ligação de tempo de design, para que possamos, por exemplo, mostrar o tema certo; você pode alterá-lo a qualquer momento, assim como você pode alterar nossa lista de ligações e ligações de fragmentos, etc.

(Aqui está o changeset completo, com mais detalhes sobre isso )

E sim, o link que a Nikolay listado acima mostra como o novo seletor de configuração se parece e funciona

Mais uma coisa: o espaço para nome "ferramentas" é especial. A ferramenta de empacotamento do Android sabe ignorá-lo; portanto, nenhum desses atributos será empacotado no APK. Estamos usando-o para metadados extras no layout. É também onde, por exemplo, os atributos para suprimir avisos de fiapos são armazenados - como ferramentas: ignorar.

Tor Norbye
fonte
como ele conhece o caminho completo para a atividade se não possui um pacote base? olha para o arquivo de manifesto?
desenvolvedor android
2
Sim, está tratando da mesma maneira que os registros de atividades no arquivo de manifesto, onde você também pode omitir o pacote no atributo name. Anexa a declaração do pacote a partir do elemento raiz do arquivo de manifesto, se necessário.
Tor Norbye
agradável . tudo isso (e mais) será mostrado no google io 2012? Mal posso esperar para ouvir sobre os novos recursos. :)
desenvolvedor android
1
No XML gerado para um novo projeto, ele coloca o tools:contextvalor em TextViewcampo. Como isso soa como um caso de uso global para aplicar um tema a todo o layout, por que ele não é colocado no layout raiz?
Jason Robinson
3
Adicionei
Tor Norbye 3/13
92

De acordo com o site do projeto Ferramentas Android :

ferramentas: contexto

Esse atributo geralmente é definido no elemento raiz em um arquivo XML de layout e registra a qual atividade o layout está associado (no momento do design, pois obviamente um layout pode ser usado por mais de um layout). Por exemplo, isso será usado pelo editor de layout para adivinhar um tema padrão, pois os temas são definidos no manifesto e estão associados a atividades, não a layouts. Você pode usar o mesmo prefixo de ponto que nos manifestos para especificar apenas a classe de atividade sem o nome completo do pacote de aplicativos como prefixo.

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

Usado por: Editores de layout no Studio & Eclipse, Lint

outro codificador
fonte
14

1.Descrição

tools: context = "activity name"ele não será empacotado no apk.Only ADTEditor de Layout no contexto de renderização correspondente do conjunto de arquivos Layout atual, mostre seu Layout atual na renderização, o contexto é o nome da atividade que corresponde à atividade, se a atividade no manifestarquivo definir um Tema, ADTO Editor de Layout renderizará seu Layout atual de acordo com o MainActivityTema. Significa que, se você definir o Tema, defina. A Luz (a outra), você vê no gerenciador de layout visual o controle de fundo do que deve ser o Tema. Parece a luz. Apenas para mostrar o que você vê é o que obtém resultados.

Algumas pessoas vêem entenderão algumas, outras vêem também não sabem, vou acrescentar algumas palavras de explicação:

2. amostra

Dê uma imagem simples tools:text, por exemplo, mais um pouco, conveniente para entender melhor otools: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" />

insira a descrição da imagem aqui

TextView1 adotou o android: text, e use o tools:textno TextView2, no lado direito do editor de Layout exibirá a fonte sample name1as sample name2duas, se depois de executar o código para compilar, gerar apk, exibir terminal apenas o sample name1, não mostre sample name2as palavras. Você pode tentar executar, ver como o efeito.

Descrição 3.Specific

1.O tools: context = "activity name"não será empacotado no apk(entendimento: o equivalente a isso é comentado, o compilado não tem efeito).

2.Somente ADTEditor de layout (ou seja, para o ícone acima no lado direito do simulador) no contexto de renderização correspondente do conjunto de arquivos de layout atual, o Layout do XML atual na renderização de contexto é o nome da atividade que corresponde à atividade, se a atividade no arquivo de manifesto definir um Tema, o ADTEditor de Layout renderizará seu Layout atual de acordo com o MainActivityTema. Significa que, se você definir o Tema, defina-o. O Light também pode ser (outro). (Entenda: você adicionou tools: context = "activity name", o layout XML está processando uma atividade especificada, estabelece um Tema no arquivo de manifesto, na foto acima, o estilo do Tema do simulador à direita também seguirá as alterações correspondentes ao Tema.)

4. resumo

Em resumo, essas propriedades visam principalmente as ferramentas corretas, o tempo de depuração do simulador exibe o status e a compilação não funciona,

KeLiuyue
fonte
7

"Tools: context" é um dos atributos de design que pode facilitar a criação de layout em XML na estrutura de desenvolvimento. Este atributo é usado para mostrar à estrutura de desenvolvimento qual classe de atividade é escolhida para implementar o layout. Usando "ferramentas: contexto", o Android Studio escolhe o tema necessário para a visualização automaticamente.

Se você quiser saber mais sobre outros atributos e ferramentas úteis para o desenvolvimento de aplicativos para Android, consulte esta análise: http://cases.azoft.com/4-must-know-tools-for-effective-android -desenvolvimento/

Mihir Patel
fonte
3

Esta é a melhor solução: https://developer.android.com/studio/write/tool-attributes

Como atributos de design, podemos definir o contexto activty em xml, como

tools:context=".activity.ActivityName"

Adaptador:

tools:context="com.PackegaName.AdapterName"

insira a descrição da imagem aqui

Você pode navegar para a classe java ao clicar no ícone marcado e as ferramentas têm mais recursos, como

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

etx

Ashik Azeez
fonte
0

tools:context=".MainActivity" thisline é usado no arquivo xml que indica o arquivo de origem java usado para acessar esse arquivo xml. significa mostrar essa visualização xml para arquivos java perticulares.

Nikita Prajapati
fonte