Какие инструменты: контекст в файлах макета 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" />

Для чего используется "tools: context"?

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

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


person android developer    schedule 18.06.2012    source источник
comment
да, мне интересно, что еще я пропустил (не видя этого в разделах «Что нового»), поскольку я всегда устанавливаю последнюю из последних версий adt & sdk (в настоящее время использую adt & sdk 20 preview 3).   -  person android developer    schedule 18.06.2012
comment
Также посмотрите официальную документацию здесь: ‹tools. android.com/tech-docs/tools-attributes#TOC-tools:context ›.   -  person MDTech.us_MAN    schedule 24.03.2014
comment
Мое приложение по-прежнему работает без контекста.   -  person most venerable sir    schedule 07.02.2018
comment
@ user132522 Все дело в разработке, в самой IDE. Не для запуска приложения   -  person android developer    schedule 07.02.2018
comment
Как насчет этого? stackoverflow.com/questions/41779742/   -  person    schedule 05.04.2018


Ответы (9)


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

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

person Nikolay Elenkov    schedule 18.06.2012
comment
понятно . согласно снимку экрана здесь: tools.android.com/_/ rsrc / 1337185954574 / latest / newconfigchooser /, это означает, что это не обязательно должен быть класс, расширяющий Context, верно? Если да, то я думаю, что это больше, чем то, о чем вы говорите, хотя я не уверен, что именно. - person android developer; 18.06.2012
comment
Activity extends Context, так что не понимаете, что вы имеете в виду? Возможно, он действительно делает больше, если вам интересно, проверьте исходный код, он доступен. Подробностей не знаю. - person Nikolay Elenkov; 18.06.2012
comment
ой. я неправильно прочитал текст на скриншоте. извините. при наведении курсора на то, что я показал, также говорится, что это может быть фрагмент, но тема фрагментов нигде не написана, не так ли? в любом случае, я все еще не уверен, для чего нужен этот новый атрибут. интересно, расскажет ли об этом новый гугл ио. - person android developer; 18.06.2012
comment
они всегда показывают, что нового, и дают подсказки. Я подожду . а пока получи +1. :) - person android developer; 18.06.2012
comment
они сделали новое видео, в котором показаны эти функции: youtube.com/ - person android developer; 05.07.2012
comment
Как система определяет, в каком пакете находится MainActivity? - person QED; 29.12.2013
comment
ссылка на последнюю версию документации developer.android.com/studio/write/tool-attributes.html - person Clive Sargeant; 06.12.2017

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

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

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

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

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

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

person Tor Norbye    schedule 19.06.2012
comment
как он узнает полный путь к действию, если у него нет базового пакета? он смотрит на файл манифеста? - person android developer; 20.06.2012
comment
Да, он обрабатывает это так же, как регистрации действий в файле манифеста, где вы также можете опустить пакет в атрибуте name. При необходимости он добавляет объявление пакета из корневого элемента файла манифеста. - person Tor Norbye; 20.06.2012
comment
отлично . все это (и многое другое) будет показано на Google io 2012? Я не могу дождаться, чтобы услышать о новых функциях. :) - person android developer; 20.06.2012
comment
В сгенерированном XML для нового проекта он помещает значение tools:context в поле TextView. Поскольку это звучит как глобальный вариант применения темы ко всему макету, почему он не помещен в корневой макет? - person Jason Robinson; 12.10.2012
comment
@androiddeveloper На самом деле я узнал об этом после IO '12. Пришло прямо с видео. :) - person Dheeraj Bhaskar; 28.12.2012
comment
они показали это здесь: youtube.com/ - person android developer; 28.12.2012
comment
Означает ли это, что это tools:context эквивалентно Context context), мы иногда видим объявленную переменную внутри реализованных методов некоторого абстрактного класса, например: SQLiteOpenHelper? - person hayonj; 25.07.2013
comment
Я добавил документ, который документирует наши текущие атрибуты инструментов: tools.android.com/tech -docs / tools-attributes - person Tor Norbye; 04.10.2013

Согласно сайту проекта 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

person anothercoder    schedule 20.02.2014

1. описание

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

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

2. образец

Возьмите простой 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. резюме

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

person KeLiuyue    schedule 15.10.2017

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

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

person Mihir Patel    schedule 13.07.2016

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

person Ashik Azeez    schedule 21.01.2019

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

person Nikita Prajapati    schedule 08.05.2017

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

person Basudev Adhikary    schedule 17.06.2020

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

tools:context=".MainActivity"
person Akanshi Srivastava    schedule 17.06.2020