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

905

Начиная с недавней новой версии 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 и т.д.?

  • 0
    да, мне интересно, что еще я пропустил (не видя этого в разделах "что нового"), так как я всегда устанавливаю самую последнюю версию adt & sdk (в настоящее время использую adt & sdk 20 preview 3).
  • 9
    Также ознакомьтесь с официальными документами здесь: < tools.android.com/tech-docs/tools-attributes#TOC-tools:context >.
Показать ещё 3 комментария
Теги:
android-layout
android-tools-namespace
android-context

8 ответов

391
Лучший ответ

Это, скорее всего, активность, которую использует редактор UI инструментов для рендеринга вашего макета (он найдет правильную тему, основанную на активности). Это описано здесь (около середины статьи, подпишитесь на эту страницу, чтобы быть в курсе).

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

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

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

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

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

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

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

  • 0
    откуда он знает полный путь к действию, если у него нет базового пакета? это смотрит на файл манифеста?
  • 2
    Да, он обрабатывает это так же, как регистрации действий в файле манифеста, где вы также можете опустить пакет в атрибуте name. При необходимости он добавляет объявление пакета из корневого элемента файла манифеста.
Показать ещё 6 комментариев
83

Согласно сайту проекта Android Tools:

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

Этот атрибут обычно задается в корневом элементе в 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

7

1.Description

tools: context = "activity name" оно не будет упаковано в apk Только ADT Layout Editor в вашем текущем файле макета задает соответствующий контекст рендеринга, показывает ваш текущий макет при рендеринге контекста, если имя действия соответствует действию, если действие в файле manifest устанавливает тему, затем редактор раскладки ADT будет отображать ваш текущий макет в соответствии с темой. Значит, если вы установите MainActivity установите тему. Свет (другой), затем вы видите в визуальном менеджере компоновки 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" />

Изображение 2919

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

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

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

2.Только редактор ADT Layout Editor (т.е. Для вышеуказанного значка с правой стороны симулятора) в текущем файле макета задает соответствующий контекст рендеринга; макет текущего XML-кода при рендеринге контекста - это имя операции, соответствующее операции, если действие в файле манифеста устанавливает тему, тогда редактор ADT Layout будет отображать ваш текущий макет в соответствии с Theme.Means, что если вы установите 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-development/

2

Он предоставляет контекст для инструментов разработки, где будет использоваться этот макет, чтобы инструменты могли лучше помочь разработчикам, например:

Более точный просмотр превью, принятие хостинговой деятельности и его тема учитывает более умных помощников, таких как вышеупомянутые быстрые инструменты: контекст является полностью необязательным. Инструменты разработки могут и могут работать без него. Эти инструменты могут несколько унизительная помощь вам, но это ваш выбор.

tools: context - или любой атрибут в пространстве имен инструментов - не будет воздействие во время выполнения. Я не проверил, но я надеюсь, что они даже выниматься при упаковке APK, поскольку они не используются при во время выполнения.

0

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

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

tools:context=".activity.ActivityName"

адаптер:

tools:context="com.PackegaName.AdapterName"

Изображение 2920

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

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

ETX

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню