为啥我的自定义按钮状态不起作用?

Posted

技术标签:

【中文标题】为啥我的自定义按钮状态不起作用?【英文标题】:Why my custom button states are not working?为什么我的自定义按钮状态不起作用? 【发布时间】:2011-04-04 20:03:29 【问题描述】:

我为按钮的背景制作了一个自定义的 9-patch 图像。按钮位于 drawable-hdpi 和 drawable-mdpi 文件夹中。我为按钮状态创建了自定义选择器文件。

选择器文件 login_button.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Image display in background in select state -->
    <item android:state_pressed="true" android:drawable="@drawable/login_button_down" />

    <!-- Image display in background in select state -->
    <item android:state_focused="true" android:drawable="@drawable/login_button_down" />

    <!-- Default state --> 
    <item android:drawable="@drawable/login_button" />
</selector>

然后我为按钮样式制作了一个自定义的styles.xml文件:

<style name="login_button_style" parent="@android:style/Widget.Button">
        <item name="android:gravity">center_vertical|center_horizontal</item>
        <item name="android:textColor">#FF000000</item>
        <item name="android:shadowColor">#FFFFFFFF</item>
        <item name="android:shadowDx">0</item>
        <item name="android:shadowDy">1</item>
        <item name="android:shadowRadius">0.2</item>
        <item name="android:textSize">13dp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:background">@drawable/login_button</item>
        <item name="android:focusable">true</item>
        <item name="android:clickable">true</item>
    </style>

然后将此样式应用到我在themes.xml中的主题文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="@android:style/Theme.NoTitleBar" >
        <item name="android:editTextStyle">@style/login_edittext_style</item>
        <item name="android:buttonStyle">@style/login_button_style</item>
        <item name="android:textViewStyle">@style/login_textview_style</item>
    </style>
</resources>

最后将按钮本身添加到布局文件中:

<Button 
   android:text="@string/login_text" 
   android:id="@+id/buttonSignIn" 
   android:layout_ 
   android:layout_>
</Button>

但如果我单击按钮,则背景图像不会更改。代码没问题,所有编译都很好。我知道对于两种不同的状态我有相同的图像,但即使对于模拟器中的一种状态也不起作用。谁能指出问题出在哪里?

编辑:

显然正常状态正在工作,因为它从选择器 xml 文件中获取图像。现在我想知道为什么其他州没有......

【问题讨论】:

如果您将login_button 设置为android:background 是否有效? @Macarse No. 已添加到按钮 android:background="@drawable/login_button",甚至尝试在 theme.xml 中注释掉按钮样式 - 结果 0。 这是风格还是主题?您如何将其应用到您的按钮或活动中? @Morrison Chang 这是添加到主题的样式。我正在使用 android:theme="@style/customTheme" 将它应用到我的活动中 那么有没有人知道为什么这段代码不起作用? 【参考方案1】:

我认为可能与命名有关,因此我将按钮状态图像命名为与 login_button 不同的名称,因为选择器 xml 文件具有相同的名称。我还编辑了我的选择器 xml 文件。

选择器 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Image display in background in select state -->
    <item android:state_pressed="true" android:drawable="@drawable/login_btn_down" />

    <!-- Image display in background in select state -->
    <item android:state_focused="true" android:drawable="@drawable/login_btn_down" />

    <!-- Default state --> 
    <item android:drawable="@drawable/login_btn" />    
</selector>

【讨论】:

以上是关于为啥我的自定义按钮状态不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的自定义按钮的值不能保存在我的数据库中?

导航栏上的自定义后退按钮不起作用

为啥我的自定义 cookiejar 不起作用?

为啥我的自定义 ButtonRenderer 不起作用?

不知道为啥我的自定义 UICollectionViewCell 不起作用?

为啥我的自定义 iPhone 委托不起作用?