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


936

Починаючи з недавньої нової версії 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).
андроїд розробник

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

2
Мій додаток досі працює без контексту.
найповажніший сер

1
@ user132522 Вся справа в розробці, в самому IDE. Не для запуску програми
розробника для android

Відповіді:


440

Це діяльність, яку редактор інтерфейсу використовує, щоб переглянути ваш макет попереднього перегляду. Це задокументовано тут :

Цей атрибут оголошує, з якою діяльністю пов’язано цю компоновку за замовчуванням. Це дозволяє використовувати функції редактора чи попереднього перегляду макета, які потребують знань про діяльність, наприклад тему, що має бути у версії попереднього перегляду та куди вставляти обробники onClick, коли ви робите їх із швидкого виправлення


розумію . відповідно до скріншоту тут: tools.android.com/_/rsrc/1337185954574/recent/newconfigchooser/… , це означає, що не повинно бути класом, що розширює контекст, правда? якщо так, я думаю, це робить більше того, що ви говорите, хоча я не впевнений, що.
андроїд розробник

2
Activityрозширюється Context, тож не знаєте, що ви маєте на увазі? Справді, це може бути більше, якщо вам цікаво, перевірте вихідний код, чи він доступний. Я не знаю жодних деталей.
Микола Єленков

ой. я неправильно прочитав текст скріншоту. коли наведіть курсор на те, що я показав, він також говорить, що це може бути фрагмент, але фрагменти не мають своєї тематики ніде написані, ні? у будь-якому разі, я все ще не впевнений, для чого це новий атрибут. цікаво, чи розкаже про це новий google io.
андроїд розробник

25
вони зробили нове відео, яке демонструє такі особливості: youtube.com/…
андроїд розробник

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

380

Цей атрибут в основному є стійкістю до вибору "Асоційована активність" над макетом. Під час виконання макет завжди асоціюється з діяльністю. Звичайно, це може бути пов'язано з більш ніж одним, але принаймні одним. У цьому інструменті нам потрібно знати про це відображення (яке під час виконання відбувається в іншому напрямку; діяльність може викликати setContentView (макет) для відображення макета) для того, щоб отримати певні функції.

Зараз ми використовуємо лише одне: вибір правильної теми для відображення для макета (оскільки файл маніфесту може реєструвати теми, які використовуються для діяльності , і як тільки ми дізнаємося про діяльність, пов’язану з макетом, ми можемо вибрати правильну тему, яку потрібно показати для макета). Надалі ми будемо використовувати це для залучення додаткових функцій - таких як візуалізація панелі дій (яка пов’язана з діяльністю), місця для додавання обробників onClick тощо.

Причина цього в інструменті: атрибут простору імен полягає в тому, що це лише відображення часу, призначене для використання інструментом. Сам макет може використовуватися різними видами діяльності / фрагментами і т. Д. Ми просто хочемо дати вам спосіб вибрати прив'язку дизайну, щоб ми могли, наприклад, показати потрібну тему; ви можете змінити його в будь-який час, як і ви можете змінити наш список перегляду та прив'язки фрагментів тощо.

(Ось повний набір змін, який містить більше деталей щодо цього )

І так, перелічене вище посилання, яке Микола, показує, як виглядає і працює новий інструмент вибору

І ще одне: простір імен "інструменти" особливий. Інструмент упаковки для android знає ігнорувати його, тому жоден з цих атрибутів не буде упакований в APK. Ми використовуємо їх для додаткових метаданих у макеті. Тут також зберігаються, наприклад, атрибути для придушення попереджень про пісні - як інструменти: ігнорувати.


як він знає повний шлях до діяльності, якщо він не має базового пакету? він дивиться на файл маніфесту?
андроїд розробник

2
Так, це трактується так само, як реєстрації діяльності у файлі маніфесту, де ви також можете опустити пакет у атрибуті name. При необхідності він попереджує декларацію пакета з кореневого елемента файлу маніфесту.
Tor Norbye

приємно. чи все це (і більше) буде показано на google io 2012? я не можу чекати, коли почую про нові функції. :)
андроїд розробник

1
У створеному XML для нового проекту він ставить tools:contextзначення на TextViewполе. Оскільки це виглядає як випадок глобального використання, щоб застосувати тему до всього макета, чому його не розміщують у кореневому макеті?
Джейсон Робінсон

3
Я додав документ, який документує наші поточні атрибути інструментів: tools.android.com/tech-docs/tools-attributes
Tor

92

Відповідно до сайту проекту 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


14

1.Опис

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

Деякі люди бачать, що деякі зрозуміють, деякі бачать також не знаю, я додам кілька слів пояснень:

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

4.підсумки

Підводячи підсумок, ці властивості в основному спрямовані на правильні інструменти, стан відображення часу налагодження симулятора та компіляція не працює,


7

"Інструменти: контекст" є одним з атрибутів дизайну, який може полегшити створення макета в XML в рамках розробки. Цей атрибут використовується, щоб показати структурі розробки, який клас діяльності обраний для реалізації макета. Використовуючи інструменти: контекст, 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 для пертикулярних файлів Java.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.