2015-10-27 2 views
1

Я пытаюсь реализовать функциональные возможности переключения на кнопке звезда в андроиде это мой ImageButton в разрешении/моегоAndroid Selecter только принимая значение по умолчанию

<ImageButton 
      android:id="@+id/star_icon" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:src="@drawable/star" 
      android:layout_alignParentBottom="true" 
      android:layout_centerHorizontal="true" 
      android:clickable="true" 
      android:onClick="onToggleStar" 
      android:background="#00ffffff" 
      android:adjustViewBounds="true" 
      android:scaleType="fitCenter" 
      android:padding="20dp"/> 

это вытяжка/star.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@android:drawable/btn_star"/> <!-- pressed --> 
    <item android:drawable="@android:drawable/btn_star_big_off"/> 

</selector> 

это мой OnClick обработчик

public void onToggleStar(View view) 
    { 
     view.setSelected(!view.isSelected()); 
    } 

проблема я fcing кнопка SRC аль пути, принимая значение по умолчанию, т.е. btn_star_big_off

Этот вопрос был задан до здесь stackoverflow.com/questions/2604599/android-imagebutton-with-a-selected-state и некоторые другие места, как хорошо, но я не в состоянии выяснить любую проблему. Пожалуйста, помогите.

редактировать

Я попытался это, а

<Button 
     android:id="@+id/star_icon" 
     android:layout_width="100dp" 
     android:layout_height="100dp" 
     android:background="@drawable/star" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:clickable="true" 
     android:onClick="onToggleStar" 

     android:adjustViewBounds="true" 
     android:scaleType="fitCenter" 
     android:padding="20dp"/> 

с двумя другими функциями же. Я использую эмулятор genymotion.

+0

вы можете попробовать удалить андроид: Src = «@ вытяжка/звезды» линия и изменить Android: фон = "# 00 ffffff "для android: background =" @ drawable/star ", я уверен, что он сработает. – dex

ответ

0

ImageButton является подклассом ImageView, не Button, это не интерактивный по умолчанию, и он не поддерживает селектор вытяжки, так что ваш селектор не будет работать на ImageButton.
Для того чтобы достичь вашей цели, вы можете запрограммировать src файла изображения либо изменить ImageButton на Button, а установить @drawable/star в качестве фона attr.

+0

stackoverflow.com/questions/2604599/android-imagebutton-with-a-selected-state, здесь также они использовали кнопку изображения и селектор работал нормально! – dex

+0

но я добавил android: clickable = "true", @ dex Я тоже это пробовал, но не мог заставить его работать, мне жаль, если это звучит по-детски. Пожалуйста, помогите –

+0

@FireSun Я тоже это пробовал, но это тоже не работает, любые другие предположения, спасибо, см. Мое редактирование. –

0

Проблема заключается в том

@android:drawable/btn_star 

сам встроенный селектор кнопки со многими деталями,

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="false" android:state_window_focused="false" 
      android:drawable="@drawable/btn_star_big_off" /> 
    <item android:state_checked="true" android:state_window_focused="false" 
      android:drawable="@drawable/btn_star_big_on" /> 
    <item android:state_checked="true" android:state_window_focused="false" 
      android:state_enabled="false" android:drawable="@drawable/btn_star_big_on_disable" /> 
    <item android:state_checked="false" android:state_window_focused="false" 
      android:state_enabled="false" android:drawable="@drawable/btn_star_big_off_disable" /> 

    <item android:state_checked="true" android:state_pressed="true" 
      android:drawable="@drawable/btn_star_big_on_pressed" /> 
    <item android:state_checked="false" android:state_pressed="true" 
      android:drawable="@drawable/btn_star_big_off_pressed" /> 

    <item android:state_checked="true" android:state_focused="true" 
      android:drawable="@drawable/btn_star_big_on_selected" /> 
    <item android:state_checked="false" android:state_focused="true" 
      android:drawable="@drawable/btn_star_big_off_selected" /> 

    <item android:state_checked="true" android:state_focused="true" android:state_enabled="false" 
      android:drawable="@drawable/btn_star_big_on_disable_focused" /> 
    <item android:state_checked="true" android:state_focused="false" android:state_enabled="false" 
      android:drawable="@drawable/btn_star_big_on_disable" /> 

    <item android:state_checked="false" android:state_focused="true" android:state_enabled="false" 
      android:drawable="@drawable/btn_star_big_off_disable_focused" /> 
    <item android:state_checked="false" android:state_focused="false" android:state_enabled="false" 
      android:drawable="@drawable/btn_star_big_off_disable" /> 

    <item android:state_checked="false" android:drawable="@drawable/btn_star_big_off" /> 
    <item android:state_checked="true" android:drawable="@drawable/btn_star_big_on" /> 
</selector> 

Так, чтобы ваш код работает, изменить

android:src="@drawable/star" 

в

android:src="@android:drawable/btn_star" 
0

@ user3892213 первой попытки добавить еще один элемент с выбранным = «ложь» после того, как выбран = «истинный»

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:drawable="@android:drawable/btn_star"/> 
    <item android:state_selected="false" android:drawable="@android:drawable/btn_star_big_off"/> 
    <item android:drawable="@android:drawable/btn_star_big_off"/> 
</selector> 

затем на Java код сначала установить выбор звезды ложной

<starObject>.setSelected(false); 

затем попытайтесь поместить войти внутрь мыши слушателя и проверить состояние звезды

public void onToggleStar(View view) 
{ 
    Log.d("STAR", view.isSelected()+""); 
    view.setSelected(!view.isSelected()); 
} 
Смежные вопросы