Что такое «инструменты: контекст» в файлах макета Android?


938

Начиная с недавней новой версии ADT, я заметил этот новый атрибут в файлах XML макета, например:

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

Для чего используется «инструменты: контекст»?

Откуда он знает точный путь к деятельности, которая там написана? Это смотрит на пакет приложения, внутри манифеста?

Это ограничено классами, которые расширяют Контекст или только действия? Это можно использовать для элементов ListView и т. Д.?


да, мне интересно, что еще я пропустил (не видя этого в разделах «что нового»), так как я всегда устанавливаю последнюю из последних версий adt & sdk (в настоящее время использую adt & sdk 20 preview 3).
Android-разработчик

9
Также посмотрите официальные документы здесь: < tools.android.com/tech-docs/tools-attributes#TOC-tools:context >.
MDTech.us_MAN

2
Мое приложение все еще работает без контекста.
самый почтенный сэр

1
@ user132522 Это все о разработке, в самой IDE. Не для того, чтобы запустить приложение
Android-разработчик

Что насчет этого? stackoverflow.com/questions/41779742/...

Ответы:


441

Это действие, которое инструменты редактора пользовательского интерфейса используют для визуализации предварительного просмотра макета. Это задокументировано здесь :

Этот атрибут объявляет, с каким действием этот макет связан по умолчанию. Это позволяет использовать функции в редакторе или предварительном просмотре макета, которые требуют знания действия, например, какой должна быть тема макета в предварительном просмотре и куда вставлять обработчики onClick при создании из быстрого исправления.


Понимаю . согласно скриншоту здесь: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/… , это означает, что не обязательно должен быть класс, расширяющий Context, верно? если так, я думаю, что это больше, чем то, что вы говорите, хотя я не уверен, что.
разработчик Android

2
Activityрасширяется Context, так что не уверены, что вы имеете в виду? Возможно, он делает больше, если вам интересно, проверьте исходный код, он доступен. Я не знаю никаких деталей.
Николай Еленков

упс Я не правильно прочитал текст скриншота. Извините. при наведении указателя мыши на то, что я показал, он также говорит, что это может быть фрагмент, но у фрагментов нигде не написана тема, нет? во всяком случае, я до сих пор не уверен, для чего этот новый атрибут. Интересно, скажет ли об этом новый гугл ио.
Android-разработчик

25
они сделали новое видео, которое показывает эту функцию: youtube.com/…
разработчик Android

1
последняя ссылка на документацию developer.android.com/studio/write/tool-attributes.html
Clive Sargeant

380

Этим атрибутом является в основном постоянство для выбора «Связанное действие» над макетом. Во время выполнения макет всегда связан с действием. Конечно, это может быть связано с более чем одним, но по крайней мере с одним. В инструменте нам нужно знать об этом отображении (которое во время выполнения происходит в другом направлении; действие может вызывать setContentView (layout) для отображения макета) для управления определенными функциями.

Прямо сейчас мы используем его только для одной цели: выбор правильной темы для показа для макета (поскольку файл манифеста может регистрировать темы для использования в действии , и как только мы узнаем действие, связанное с макетом, мы можем выбрать правильная тема, чтобы показать для макета). В будущем мы будем использовать это для добавления дополнительных функций, таких как отображение панели действий (связанной с действием), места для добавления обработчиков onClick и т. Д.

Причина, по которой это атрибут tools: namespace, заключается в том, что это только отображение времени разработки для использования инструментом. Сам макет может использоваться несколькими действиями / фрагментами и т. Д. Мы просто хотим дать вам способ выбрать привязку времени разработки, чтобы мы могли, например, показать правильную тему; Вы можете изменить его в любое время, так же, как вы можете изменить наш список, привязки фрагментов и т. д.

(Вот полный набор изменений, который имеет более подробную информацию об этом )

И да, ссылка Николая, указанная выше, показывает, как выглядит и работает новая программа выбора конфигурации.

Еще одна вещь: пространство имен «инструменты» является особенным. Инструмент упаковки Android знает, что его игнорировать, поэтому ни один из этих атрибутов не будет упакован в APK. Мы используем его для дополнительных метаданных в макете. Здесь также хранятся, например, атрибуты для подавления предупреждений lint - как инструменты: игнорировать.


откуда он знает полный путь к действию, если у него нет базового пакета? это смотрит на файл манифеста?
Android-разработчик

2
Да, он обрабатывает это так же, как регистрации действий в файле манифеста, где вы также можете опустить пакет в атрибуте name. При необходимости он добавляет объявление пакета из корневого элемента файла манифеста.
Тор Норби

отлично . будет ли все это (и больше) показываться на Google io 2012? я не могу дождаться, чтобы услышать о новых функциях. :)
Android-разработчик

1
В сгенерированном XML для нового проекта это tools:contextзначение помещается в TextViewполе. Поскольку это похоже на глобальный вариант использования для применения темы ко всему макету, почему она не помещается в корневой макет?
Джейсон Робинсон

3
Я добавил документ, который документирует наши текущие атрибуты инструментов: tools.android.com/tech-docs/tools-attributes
Tor Norbye

92

По данным сайта Android Tools Project :

инструменты: контекст

Этот атрибут обычно устанавливается в корневом элементе XML-файла макета и записывает, с каким действием связан макет (во время разработки, поскольку очевидно, что макет может использоваться более чем одним макетом). Это, например, будет использоваться редактором макетов для угадывания темы по умолчанию, поскольку темы определены в манифесте и связаны с действиями, а не с макетами. Вы можете использовать тот же префикс точки, что и в манифестах, чтобы просто указать класс активности без полного имени пакета приложения в качестве префикса.

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

Используется: редакторами макетов в Studio & Eclipse, Lint


14

1.Description

tools: context = "activity name"он не будет упакован в apk.Only ADTLayout Editor в вашем текущем файле Layout, задающем соответствующий контекст рендеринга, покажите ваш текущий Layout при рендеринге контекста, если имя действия соответствует действию, если действие в manifestфайле установило Theme, тогда ADTРедактор макетов отобразит ваш текущий макет в соответствии с Theme.Means, что, если вы установите MainActivityнабор Theme. Свет (другой), затем вы видите в диспетчере визуального макета o фоновый контроль того, что должно быть Темой. Свет выглядит так. Только чтобы показать вам, что вы видите, это то, что вы получаете результаты.

Некоторые люди видят, поймут некоторые, некоторые люди видят, также не знают, я добавлю несколько слов объяснения:

2.Sample

Возьмите простой tools:text, например, еще один образ, удобный для дальнейшего пониманияtools: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" />

введите описание изображения здесь

TextView1 принял android: text, и использовать tools:textв TextView2, на правой стороне редактора макетов будет отображаться sample name1, sample name2два шрифта, если после запуска кода для компиляции, сгенерированный apk, терминал отображает только то sample name1, не показывает sample name2слова. Вы можете попробовать запустить, посмотреть, как эффект.

3. конкретное описание

1. tools: context = "activity name"Это не будет упаковано в apk(понимание: эквивалент этого комментируется, компилируемый не дает эффекта.)

2. ADTТолько редактор макетов (т. Е. Для вышеуказанного значка с правой стороны симулятора) в текущем файле макета задает соответствующий контекст рендеринга, макет текущего XML-кода при рендеринге контекста является именем действия, соответствующим деятельности, если действие в файле манифеста устанавливает тему, затем ADTредактор макетов будет отображать ваш текущий макет в соответствии с темой. Это означает, что если вы установите MainActivityнабор темы. Свет может также быть (другим). (Понимаю: вы добавили tools: context = "activity name", макет XML отображает указанное действие, устанавливает тему в файл манифеста, изображенный выше правого симулятора. Стиль темы также будет следовать изменениям, соответствующим теме.)

4.summary

Подводя итог, можно сказать, что эти свойства в основном ориентированы на нужные инструменты, состояние отображения времени отладки симулятора и компиляция не работает,


7

«Tools: context» - это один из атрибутов дизайна, который может облегчить создание макета в XML в среде разработки. Этот атрибут используется, чтобы показать платформе разработки, какой класс действий выбран для реализации макета. Используя «tools: context», Android Studio автоматически выбирает необходимую тему для предварительного просмотра.

Если вы хотите узнать больше о некоторых других атрибутах и ​​полезных инструментах для разработки приложений для Android, взгляните на этот обзор: http://cases.azoft.com/4-must-know-tools-for-effective-android -разработка /


3

Это лучшее решение: https://developer.android.com/studio/write/tool-attributes

Это атрибуты дизайна, которые мы можем установить в активном контексте в XML как

tools:context=".activity.ActivityName"

адаптер:

tools:context="com.PackegaName.AdapterName"

введите описание изображения здесь

Вы можете перейти к классу Java при нажатии на отмеченный значок, и инструменты имеют больше функций, таких как

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

ETX


0

tools:context=".MainActivity" Эта строка используется в XML-файле, который указывает, какой исходный файл Java используется для доступа к этому XML-файлу. это означает показать этот предварительный просмотр xml для perticular java-файлов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.