В Android XML можно ли установить buttonStyleSmall или Button.Small в качестве родительского стиля в собственный стиль? - PullRequest
9 голосов
/ 23 августа 2011

Я хочу расширить стиль маленьких кнопок Android.Я могу сделать это в строке:

<Button android:id="@+id/myButton"
        style="?android:attr/buttonStyleSmall"
        android:layout_alignParentRight="true"
        android:layout_gravity="right"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:textSize="10dp"
        android:text="Click Here"/>

Но в интересах повторного использования я хочу перенести эти стили в собственный стиль.Как я могу добавить buttonStyleSmall (или Widget.Button.Small?) Как родительский стиль?Примерно так в моем собственном стиле XML:

<style name="RightLink" parent="?android:attr/buttonStyleSmall">
  <item name="android:layout_alignParentRight">true</item>
  <item name="android:layout_gravity">right</item>
  <item name="android:layout_height">wrap_content</item>
  <item name="android:layout_width">wrap_content</item>
  <item name="android:paddingLeft">2dp</item>
  <item name="android:paddingRight">2dp</item>
  <item name="android:textSize">10dp</item>
</style>

с объявлением кнопки с использованием этого стиля:

<Button android:id="@+id/myButton"
        style="@style/RightLink"
        android:text="Click Here"/>

РЕДАКТИРОВАТЬ

Использованиеправильный синтаксис, как описано Лукасом ниже (используйте @android:attr/buttonStyleSmall в качестве родителя), я все еще вижу разницу между ними:

Кнопка с buttonStyleSmall в качестве добавленного стиля и встроенных стилей:

pic1

Пользовательский стиль с buttonStyleSmall в качестве родителя:

pic2

Что мне не хватает?

1 Ответ

15 голосов
/ 24 августа 2011

Итак, вы пытаетесь наследовать информацию о стиле от стандартного стиля Android.Для этого вам нужно будет использовать parent -атрибут, как вы уже это сделали.

Единственное исключение при наследовании стандартного стиля состоит в том, что вы должны использовать @, а не ?:

<style name="RightLink" parent="@android:attr/buttonStyleSmall">

Еще немного о том, как это сделать для стилей платформы (потому что это отличается от стилей, которые вы создали самостоятельно), можно найти здесь .


Поэкспериментировав с этим, я обнаружил, что способ, которым вы делаете вдох, правильный, но обращение неверное:

<style name="RightLink" parent="@android:style/Widget.Button.Small">

Это работает.

Разница выглядит так, что целочисленная константакоторый используется для добавления этого с помощью style -атрибута и в коде объявляется в Androids R -классе в attr -подклассе.

Определения XML-стиля (из которого вы можетефактически наследуются) хранятся в style -подклассе R -класса.Таким образом, приведенная выше строка должна решить вашу проблему.

...