在Android XML中,我可以将buttonStyleSmall或Button.Small设置为自定义样式的父样式吗?

时间:2011-08-23 19:57:46

标签: android android-layout android-xml android-styles

我想扩展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"/>

修改

使用下面Lukas所描述的正确语法(使用@android:attr/buttonStyleSmall作为父级),我仍然看到两者之间存在差异:

带有buttonStyleSmall的按钮作为样式和内联样式添加:

pic1

使用buttonStyleSmall作为父级的自定义样式:

pic2

我错过了什么?

1 个答案:

答案 0 :(得分:15)

所以你尝试从标准的Android风格inherit style informations。为此,您需要使用parent - 属性,就像您已经使用的那样。

继承标准样式时唯一的例外是,您必须使用@而不是?

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

更多关于如何为平台样式执行此操作(因为这与您自己创建的样式不同)可以找到here


在玩完之后我发现你的方式是正确的,但追索是错误的:

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

这很有效。

差异接缝是用于通过使用style - 属性和代码添加它的整数常量在Androids R中声明 - attr中的类-subclass。

XML样式定义(实际可以从中继承)存储在style - 类的R - 子类中。所以上面的那一行应该可以解决你的问题。