Подтвердить что ты не робот

Android-стили: разница между "style =" @android: style/XYZ "'и' style ="? Android: attr/XYZ "??

Я пытаюсь стилизовать кнопки, чтобы они выглядели как те, о которых я прошу в Android Minimalist Bottom ButtonsViews в стиле Android.

Я преуспел, со следующим xml для всех, кого это интересует:

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_gravity="bottom"
        android:divider="@android:drawable/divider_horizontal_dark"
        android:gravity="bottom"
        android:orientation="vertical"
        android:paddingTop="16dip"
        android:showDividers="beginning|end" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:measureWithLargestChild="true"
            android:orientation="horizontal"
            android:divider="@android:drawable/divider_horizontal_dark"
            android:showDividers="middle" >                             


            <Button
                android:id="@+id/cancel_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:maxLines="2"
                android:text="@string/cancel_button" />

            <Button
                android:id="@+id/login_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_gravity="right"
                android:layout_weight="1"
                android:filterTouchesWhenObscured="true"
                android:maxLines="2"
                android:text="@string/login_button" />

        </LinearLayout>
    </LinearLayout>

Один вопрос. Помощник по контексту eclipse не знает, что происходит со следующим разрешением ресурса:

style="?android:attr/buttonBarButtonStyle"

Я знаком с типичным разрешением (о котором помогает помощь в освещении затмения)

[email protected]/style/...

... но я не совсем понимаю разницу между ними. Кажется, что некоторые атрибуты стиля появляются в одном, но не в другом. Например, следующее ничего не решает:

[email protected]:attr/buttonBarStyle

и не делает этого:

style="@android:style/buttonBarStyle

Итак, я думаю, здесь два вопроса:

  • Почему разница в синтаксисе ссылок на ресурсы?
  • Почему запутанная неправильная классификация стилей в категории attr.
  • Что такое категория attr, которая используется еще раз?

Спасибо!

4b9b3361

Ответ 1

От еще один ответ на SO (перефразируемый здесь):

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

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

Ссылка на атрибуты стиля

Ответ 2

? android: attr/buttonBarButtonStyle или просто ? android: buttonBarButtonStyle - (attr необязательно)

<item name="buttonBarButtonStyle">@android:style/Widget.Button</item>

Это внутренние различия в @android: style/Widget.Button, которые определены в файле appcompat/res/values ​​/ themes.xml.

(? android:) - всегда ссылается на значение атрибута из применяемой текущей темы. Таким образом, позволяя нам отнести определенный стиль к андроиду, скорее создав новый, и предоставив строго кодированное значение.

Google Doc говорит: Он использует стиль, определенный этим атрибутом, в текущей теме