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

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

12 ответов

Решение

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

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

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

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

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

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

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

По данным сайта 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

1.Description

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

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

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

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

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

4.summary

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

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

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

Это лучшее решение: 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

<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    //more views

</androidx.constraintlayout.widget.ConstraintLayout>

В приведенном выше коде основная потребность в tools:context заключается в том, чтобы указать, с каким действием или фрагментом файл макета связан по умолчанию. Таким образом, вы можете указать имя класса активности, используя тот же префикс точки, что и в файле манифеста.

Таким образом, Android Studio автоматически выберет необходимую тему для предварительного просмотра, и вам не придется вручную настраивать предварительный просмотр. Как мы все знаем, файл макета может быть связан с несколькими действиями, но темы определены в файле манифеста, и эти темы связаны с вашей деятельностью. Итак, добавив tools:context в файл макета, предварительный просмотр Android Studio автоматически выберет для вас необходимую тему.

Этот атрибут помогает лучше понять деятельность, связанную с вашим макетом. Это также полезно, когда вам нужно добавить обработчики onClick в представление с помощью QuickFix.

tools:context=".MainActivity"

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

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

tools:context — это атрибут, который был представлен в Android Studio и плагине Android Gradle. Он используется в файлах макетов для указания контекста, в котором будет использоваться макет.

Пространство имен tools используется для указания атрибутов, которые не используются во время выполнения, но используются редактором макетов Android Studio и другими инструментами, чтобы дать вам больше контроля над визуализацией ваших макетов. Атрибут tools:context позволяет указать полное имя класса Java, представляющего контекст макета. Это используется редактором макета для определения темы и атрибутов, которые следует применить к макету при его отображении в редакторе.

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

Атрибут tools:context можно использовать с любым классом, расширяющим контекст, например с действием, службой или приложением. Однако чаще всего он используется с классами Activity, поскольку они являются основной точкой входа для большинства приложений.

Атрибут контекста не ограничивается только действиями, его можно использовать для любого класса Java, который расширяет контекст. Его можно использовать для любого класса на основе контекста, например, в элементах ListView, но в основном он используется в действиях.

По данным developer.android.com

Предназначен для: Любой корень<View>

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

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

Рисунок 2. Quickfix для атрибута onClick работает, только если вы установили tools:context

Вы можете указать имя класса активности, используя тот же точечный префикс, что и в файле манифеста (исключая полное имя пакета). Например:

      <android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >

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

Другие вопросы по тегам