10

我想扩展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 样式和内联样式的按钮:

图1

以 buttonStyleSmall 为父的自定义样式:

图2

我错过了什么?

4

1 回答 1

16

因此,您尝试从标准 Android 样式继承样式信息。为此,您需要像以前parent一样使用 - 属性。

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

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

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


玩了之后发现你inhirate的方式是对的,但是recourse是错误的:

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

这行得通。

不同之处在于,用于通过使用style-attribute 和在代码中添加它的整数常量在-subclass的 Androids R-class 中声明。attr

XML-Style 定义(您实际上可以从中继承)存储在 -class 的style-subclass 中R。所以上面的行应该可以解决你的问题。

于 2011-08-23T22:10:20.673 回答