2012-06-22 3 views
12

Я пытаюсь стиль кнопки, чтобы выглядеть, как те, о которых я спрашиваю в Android Full Width ICS style Minimalist Bottom ButtonsViews.Android-стили: разница между «style =» @ android: style/XYZ «'и' style ="? Android: attr/XYZ "'?

мне удалось со следующим 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> 

один вопрос, хотя. Содержание затмения помощи не имеет ни малейшего представления, что происходит со следующим разрешением ресурсов:

style="?android:attr/buttonBarButtonStyle"

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

[email protected]/style/...

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

[email protected]:attr/buttonBarStyle

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

style="@android:style/buttonBarStyle

Так что я думаю, два вопроса:

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

Спасибо!

ответ

13

От another answer на SO (перефразируя здесь):

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

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

Referencing Style Attributes

1

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

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

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

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

Google Doc говорит "It uses the style that is defined by this attribute, in the current theme"