为什么我的ImageButton样式不能应用于我的ImageButton?

时间:2015-12-13 00:25:47

标签: android android-styles

我设置了一些样式来处理不同的API(一个用于v21,另一个用于低于此值的任何API)。我想为我的ImageButton设置一个样式,但它似乎没有按照我期望的方式运行。

v-21的风格是

<style name="BorderlessImageButton" parent="AppTheme.BorderlessImageButton">
    <item name="android:background">?android:attr/selectableItemBackgroundBorderless</item>
    <item name="android:tint">@color/secondary_text</item>
</style>

将用于v-21以下所有其他API的样式是

<style name="BorderlessImageButton" parent="AppTheme.BorderlessImageButton"/>

<style name="AppTheme.BorderlessImageButton" parent="@android:style/Widget.ImageButton">
    <item name="android:tint">@color/secondary_text</item>
    <item name="android:background">@color/borderless_button_background</item>
</style>

这是我的xml资源

<ImageButton
    android:id="@+id/imageButton"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:layout_toStartOf="@id/date_picker"
    android:background="@null"
    android:padding="10dp"
    android:src="@drawable/ic_today_white_24dp"
    android:theme="@style/BorderlessImageButton" />

如果我在具有v-21或v-22的设备上运行此按钮,则该按钮在视觉上对我的触摸没有反应,因为我期望使用?android:attr / selectableItemBackgroundBorderless。此外,在v-21以下的任何设备上,该按钮仍然不会对我为其设置的选择器资源做出反应。

res/color/borderless_button_background.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/accent" />
    <item android:color="@color/transparent"/>
</selector>

请根据用户在其设备上使用的API,帮助我让按钮对触摸做出正确反应。

由于

1 个答案:

答案 0 :(得分:1)

您需要使用

来应用您的风格
style="@style/BorderlessImageButton"

属性android:theme用于活动,请参阅this

<强>更新

自Android 5.0或AppCompat 22.1.0+(api 11+)以来,您还可以在单​​个视图上使用ThemeOverlay并使用android:theme。您可以阅读有关此技术here的信息。感谢Ian。