Почему мои пользовательские состояния кнопок не работают? - PullRequest
6 голосов
/ 05 апреля 2011

Я сделал собственные 9-патч-изображения для фона моей кнопки. Кнопки находятся в папках 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_width="130dp" 
   android:layout_height="wrap_content">
</Button>

Но если я нажму кнопку, фоновое изображение не изменится. Код в порядке и все хорошо компилируется. Я знаю, что у меня одно и то же изображение для двух разных состояний, но оно не работает даже для одного состояния в эмуляторе. Кто-нибудь может указать мне, где проблема?

EDIT:

Очевидно, что нормальное состояние работает, потому что оно получает свое изображение из XML-файла селектора. Теперь мне интересно, почему другие государства не ...

1 Ответ

5 голосов
/ 05 апреля 2011

Я подумал, что, возможно, это связано с именованием, поэтому я назвал изображения состояний кнопок с другим именем, чем 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...