¿Qué es "herramientas: contexto" en los archivos de diseño de Android?

937

Comenzando con una nueva versión reciente de ADT, he notado este nuevo atributo en los archivos XML de diseño, por ejemplo:

<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 qué se utiliza "herramientas: contexto"?

¿Cómo sabe siquiera la ruta exacta a la actividad que está escrita allí? ¿Mira el paquete de la aplicación, dentro del manifiesto?

¿Se limita a clases que extienden el contexto o solo actividades? ¿Es utilizable para elementos ListView, etc.?

desarrollador de Android
fuente
sí, me pregunto qué más me he perdido (sin verlo en las secciones "novedades") ya que siempre instalo la última de las últimas versiones de adt & sdk (actualmente usando adt & sdk 20 preview 3).
Desarrollador de Android
99
Además, eche un vistazo a los documentos oficiales aquí: < tools.android.com/tech-docs/tools-attributes#TOC-tools:context >.
MDTech.us_MAN
2
Mi aplicación aún funciona sin contexto.
Señor más venerable
1
@ user132522 Se trata de desarrollo, en el propio IDE. No es para cuando se ejecuta la aplicación
desarrollador de Android

Respuestas:

440

Esta es la actividad que utiliza el editor de UI de herramientas para representar la vista previa de su diseño. Está documentado aquí :

Este atributo declara a qué actividad se asocia este diseño de forma predeterminada. Esto habilita funciones en el editor o en la vista previa del diseño que requieren conocimiento de la actividad, como cuál debería ser el tema del diseño en la vista previa y dónde insertar los controladores onClick cuando los realiza desde una revisión rápida

Nikolay Elenkov
fuente
Veo . de acuerdo con la captura de pantalla aquí: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/… , significa que no tiene que ser una clase que extienda el contexto, ¿verdad? si es así, creo que hace más de lo que estás diciendo, aunque no estoy seguro de qué.
Desarrollador de Android
2
Activityse extiende Context, así que no estoy seguro de lo que quieres decir? De hecho, podría estar haciendo más, si está interesado, verifique el código fuente, está disponible. No conozco ningún detalle.
Nikolay Elenkov
¡Uy! No leí el texto de la captura de pantalla correctamente. Al pasar el mouse sobre lo que he mostrado, también dice que puede ser un fragmento, pero los fragmentos no tienen su tema escrito en ninguna parte, ¿no? de todos modos, todavía no estoy seguro de para qué es este nuevo atributo. me pregunto si el nuevo google io dirá sobre esto.
Desarrollador de Android
25
hicieron un nuevo video que muestra estas características: youtube.com/…
desarrollador de Android
1
enlace de documentación más reciente developer.android.com/studio/write/tool-attributes.html
Clive Sargeant
380

Ese atributo es básicamente la persistencia de la selección "Actividad asociada" sobre el diseño. En tiempo de ejecución, un diseño siempre está asociado con una actividad. Por supuesto, puede asociarse con más de uno, pero al menos con uno. En la herramienta, necesitamos saber sobre este mapeo (que en tiempo de ejecución ocurre en la otra dirección; una actividad puede llamar a setContentView (diseño) para mostrar un diseño) para controlar ciertas características.

En este momento, lo estamos usando solo para una cosa: elegir el tema correcto para mostrar para un diseño (ya que el archivo de manifiesto puede registrar temas para usar en una actividad , y una vez que conocemos la actividad asociada con el diseño, podemos elegir el tema correcto para mostrar para el diseño). En el futuro, usaremos esto para impulsar funciones adicionales, como representar la barra de acción (que está asociada con la actividad), un lugar para agregar controladores de clic, etc.

La razón por la que se trata de herramientas: el atributo de espacio de nombres es que esta es solo una asignación de tiempo designada para uso de la herramienta. El diseño en sí mismo puede ser utilizado por múltiples actividades / fragmentos, etc. Solo queremos darle una forma de elegir un enlace de tiempo designado de modo que podamos, por ejemplo, mostrar el tema correcto; puede cambiarlo en cualquier momento, al igual que puede cambiar nuestra vista de lista y enlaces de fragmentos, etc.

(Aquí está el conjunto de cambios completo que tiene más detalles sobre esto )

Y sí, el enlace que Nikolay enumeró arriba muestra cómo se ve y funciona el nuevo selector de configuración

Una cosa más: el espacio de nombres "herramientas" es especial. La herramienta de empaquetado de Android sabe ignorarlo, por lo que ninguno de esos atributos se incluirá en el APK. Lo estamos usando para metadatos adicionales en el diseño. También es donde, por ejemplo, se almacenan los atributos para suprimir las advertencias de pelusa, como herramientas: ignorar.

Tor Norbye
fuente
¿Cómo sabe la ruta completa a la actividad si no tiene un paquete base? ¿mira el archivo de manifiesto?
Desarrollador de Android
2
Sí, lo trata de la misma manera que los registros de actividad en el archivo de manifiesto, donde también puede omitir el paquete en el atributo de nombre. Antepone la declaración del paquete del elemento raíz del archivo de manifiesto, si es necesario.
Tor Norbye
bonito . ¿se mostrará todo esto (y más) en google io 2012? No puedo esperar para escuchar sobre las nuevas características. :)
desarrollador de Android
1
En el XML generado para un nuevo proyecto, pone el tools:contextvalor en el TextViewcampo. Dado que esto suena como un caso de uso global para aplicar un tema a todo el diseño, ¿por qué no se coloca en el diseño raíz?
Jason Robinson
3
He agregado un documento que documenta nuestros atributos de herramientas actuales: tools.android.com/tech-docs/tools-attributes
Tor Norbye
92

Según el sitio del proyecto de herramientas de Android :

herramientas: contexto

Este atributo generalmente se establece en el elemento raíz en un archivo XML de diseño y registra con qué actividad está asociado el diseño (en el momento designado, ya que obviamente un diseño puede ser utilizado por más de un diseño). El editor de diseño lo utilizará, por ejemplo, para adivinar un tema predeterminado, ya que los temas se definen en el Manifiesto y están asociados con actividades, no con diseños. Puede usar el mismo prefijo de punto que en los manifiestos para especificar la clase de actividad sin el nombre completo del paquete de la aplicación como prefijo.

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

Utilizado por: Editores de diseño en Studio & Eclipse, Lint

otro codificador
fuente
14

1. Descripción

tools: context = "activity name"no se empaquetará en el editor de diseño apk.Only ADTen su archivo de diseño actual establece el contexto de representación correspondiente, muestre su diseño actual al representar el contexto es el nombre de la actividad correspondiente a la actividad, si la actividad en el manifestarchivo establece un tema, entonces ADTEl editor de diseño representará su diseño actual de acuerdo con el tema, lo que significa que si establece el MainActivitytema. La luz (la otra), luego se ve en el administrador de diseño visual o el control de fondo de lo que debería ser el tema. Se ve la luz. Solo para mostrarte lo que ves es lo que obtienes resultados.

Algunas personas ven entenderán algunas, algunas personas ven lo que tampoco saben, agregaré algunas palabras de explicación:

2. Muestra

Tome una imagen simple tools:text, por ejemplo, un poco más, conveniente para comprender mejor eltools: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" />

ingrese la descripción de la imagen aquí

TextView1 aprobó el android: text, y utilizar el tools:textde la TextView2, en el lado derecho del editor de diseño mostrará el sample name1, el sample name2dos de fuente, si después de ejecutar el código para compilar, generada apkpantalla, terminal sólo el sample name1, no muestra las sample name2palabras. Puedes intentar correr, ver cómo funciona el efecto.

3.Descripción específica

1.El tools: context = "activity name"no se empaquetará en el apk(comprensión: el equivalente de esto se comenta, el compilado no tiene efecto).

2.Solo el ADTeditor de diseño (es decir, para el icono anterior en el lado derecho del simulador) en el archivo de diseño actual establece el contexto de representación correspondiente, el diseño del XML actual al representar el contexto es el nombre de la actividad correspondiente a la actividad, si la actividad en el archivo de manifiesto establece un Tema, luego el ADTEditor de diseño representará su Diseño actual de acuerdo con el MainActivityTema. Significa que si configura el tema, establezca un Tema. La luz también puede ser (otra). (Comprenda: agregó tools: context = "activity name", el diseño XML está representando la actividad especificada, establece un tema en el archivo de manifiesto, el estilo del tema del simulador a la derecha también seguirá los cambios correspondientes al tema).

4 resumen

En resumen, estas propiedades apuntan principalmente a las herramientas correctas, el estado de visualización del tiempo de depuración del simulador y la compilación no funciona,

KeLiuyue
fuente
7

“Herramientas: contexto” es uno de los atributos de diseño que pueden facilitar la creación de diseños en XML en el marco de desarrollo. Este atributo se utiliza para mostrar al marco de desarrollo qué clase de actividad se elige para implementar el diseño. Usando "herramientas: contexto", Android Studio elige el tema necesario para la vista previa automáticamente.

Si desea obtener más información sobre algunos otros atributos y herramientas útiles para el desarrollo de aplicaciones de Android, consulte esta revisión: http://cases.azoft.com/4-must-know-tools-for-effective-android -desarrollo/

Mihir Patel
fuente
3

Esta es la mejor solución: https://developer.android.com/studio/write/tool-attributes

Estos son los atributos de diseño que podemos establecer en contexto de actividad en xml como

tools:context=".activity.ActivityName"

Adaptador:

tools:context="com.PackegaName.AdapterName"

ingrese la descripción de la imagen aquí

Puede navegar a la clase Java al hacer clic en el icono marcado y las herramientas tienen más funciones como

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

etx

Ashik Azeez
fuente
0

tools:context=".MainActivity" thisline se usa en un archivo xml que indica qué archivo fuente java se usa para acceder a este archivo xml. significa mostrar esta vista previa xml para archivos java perticulares.

Nikita Prajapati
fuente