这是我的问题。我已经定义了自定义主题和样式,以便在相关的.xml文件中自定义各种视图。以下是一些代码提取:
的themes.xml:
...
<style name="Legacy" parent="android:Theme.NoTitleBar">
<item name="android:buttonStyle">@style/Legacy.Button</item>
...
</style>
styles.xml:
...
<style name="Legacy.Button" parent="@android:style/Widget.Button">
<item name="android:textColor">#ffffff</item>
<item name="android:background">@drawable/button_selector_blue</item>
<item name="android:textSize">15dp</item>
</style>
假设我将应用程序的主题设置为Legacy。如果我在布局中使用Button,它将获得我的自定义默认参数(白色文本,背景是@ drawable / button_selector_blue等)。
现在假设我想保留这些参数以保存文本大小:我想要一些文本大小较大的按钮,这些按钮将在attrs.xml中的titleSize属性中定义:
...
<attr name="titleSize" format="reference|dimension" />
我在themes.xml文件中为每个主题设置了哪个值。
所以我的布局包含如下内容:
<Button
android:id="@+idmyButtonId"
android:drawableRight="@drawable/aDrawable"
android:text="@string/someText"
android:textSize="?titleSize"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</Button>
启动我的应用时出现以下错误: java.lang.UnsupportedOperationException:无法转换为dimension:type = 0x2
所以我似乎无法使用属性调整自定义样式 - 至少不是这种方式。这样的事情可能吗?如果没有,你会用什么来达到这样的结果呢?
我想让用户能够在不同的主题中进行选择,所以我不能只定义一个额外的ButtonWithLargeText样式并直接在我的布局中使用它。
感谢您的帮助!
答案 0 :(得分:0)
我终于开始工作了。我没有在attrs.xml中定义我的标题大小,而是使用了dimens.xml。所以现在以下工作:
<Button
android:id="@+idmyButtonId"
android:drawableRight="@drawable/aDrawable"
android:text="@string/someText"
android:textSize="@dimen/titleSize"
android:layout_width="fill_parent" android:layout_height="wrap_content">
</Button>
虽然我使用这个来获取Button上的常规文本大小(我在styles.xml中定义):
<Button
android:id="@+id/idRegularButton"
android:text="@string/regularSizeText"
android:layout_width="wrap_content" android:layout_height="wrap_content">
</Button>