Android XML Есть ли способ использовать пространство имен инструмента с пользовательскими атрибутами?

Я создал собственный вид с атрибутами. Есть ли способ использовать эти атрибуты с инструментами Android в Android Studio?

например:

<MyOwnCoolView
    android:layout_width="96dp"
    android:layout_height="96dp"
    android:padding="3dp"
    tools:dividerAngle="2"/>

Где файл attr:

<resources>
<declare-styleable name="MyOwnCoolView">
    <attr name="dividerAngle" format="float"/>
</declare-styleable>

3 ответа

Решение

Мое мнение, что вы не можете.

Здесь есть официальная, хотя и очень старая страница, которая цитирует:

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

Я искал то же самое некоторое время сейчас. Решил сделать библиотеку, которая позволит это сделать. https://github.com/giljulio/sneakpeek

Я написал крошечную библиотеку, которая позволяет вам определять атрибуты времени разработки для ваших представлений: https://github.com/paulmanta/app-tools-attrs

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

<declare-styleable name="MyWidget">
    <attr name="title" format="string"/>
    <attr name="tools_title" format="string"/>
</declare-styleable>

Наконец, когда вы инициализируете свой пользовательский вид, используйте AppToolsAttrs класс вместо доступа к атрибутам непосредственно из TypedArray:

AppToolsAttrs.getString(a, isInEditMode(), R.styleable.MyWidget_title, R.styleable.MyWidget_tools_title)

Затем вы можете использовать свои атрибуты времени разработки, как это:

<com.myapplication.MyWidget
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tools_title="Lorem ipsum"
    app:title="@string/real_title"/>

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

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