2017-01-24 16 views
0

У меня есть кнопка «Like», которую пользователь может щелкнуть, чтобы «как-то» (аналогично Facebook).Кнопка состояния не работает, как ожидается при нажатии

Мне нужно сделать так, чтобы после того, как пользователь что-то понравился, цвет текста кнопки изменился на красный.

Вот мой код прямо сейчас:

<?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/red" /> 
    <item 
     android:color="@color/normal" /> 
</selector> 

Кнопка:

<Button 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Like" 
    android:textColor="@drawable/like_button" /> 

Проблема заключается в том, что цвет текста не остается красной, когда я поднимаю свой палец, это только изменения на красный, когда я держу палец над кнопкой.

Что я должен изменить?

+0

'' возвращает ваш текст обратно к нормальному цвету – MohammedAlSafwan

+1

@ user7455496 Обычно вы можете изменить цвет текста внутри кнопки, когда его щелкнули в onClickListner. Что об этом? –

ответ

0

Для того, чтобы «сохранить» состояние «как», вам необходимо обновить модель данных/базу данных за кнопкой с помощью некоторого логического индикатора, который говорит «да, теперь это нравится/не работает».

Ваш селектор XML только говорит: «Меняйте цвет, когда он нажат, в противном случае верните», у него нет логики, чтобы сказать «это теперь нравится».

0

Вы просто указываете одно нажатие кнопки состояния, нажатие которой нажата. Вот почему он становится красным только тогда, когда вы нажимаете на него. Если вы хотите сделать текст красным после нажатия кнопки, тогда вы должны добавить селектор в вытяжке что-то вроде этого:

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

в вашей деятельности, поместите этот код:

final Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     if(button.isSelected()) 
       button.setSelected(false); 
      else 
       button.setSelected(true); 
     } 
    }); 

Это будет выбрать кнопку и изменить цвет текста на красный, а если кнопка уже выбран, он изменит его на нормальное. Если вы просто хотите, чтобы кнопка была выбрана на щелкните, вы можете просто добавить эту строку в OnClickListener.

button.setSelected(true); 
0

State_pressed - это механизм, позволяющий вам знать, действительно ли кнопка нажата или нет. Это похоже на случай предоставления небольшого звука, когда вы действительно нажимаете клавишу на виртуальной клавиатуре.

Поскольку я не знаю всей истории вашей ситуации, я думаю, что, возможно, шаблон MVC подходит для вашего случая.

Например, на задней панели хранится сохранение данных = true или false.

В представлении есть две кнопки: likeButton и unlikeButton. Когда понравилось == false, likeButton видна и в отличие от Button невидима. Когда понравилось == true, likebutton невидим и в отличие от Btton видно.

Слушатель OnClick для likeButton и unlikeButton должен установить данные, которые понравились = true или false.

Оба типа, какButton и unlikeButton, могут иметь state_pressed, чтобы изменить цвет кнопки на красный, чтобы пользователь знал, что кнопка уже нажата и нажата. Но, во всяком случае, как только кнопка отпускается после нажатия, слушатель onClick должен начать выполнять задания, и, наконец, уже нажатая кнопка должна стать невидимой.

Надеюсь, что этот пример может быть прояснен.

1

Согласно кода вы специально с помощью:

android:state_pressed="true" 

В основном это означает, что только красный, когда нажата, следовательно, результаты вы получаете

Источник: https://developer.android.com/guide/topics/resources/color-list-resource.html

Вам нужно включить в вашей деятельности (Java)

Button likeButton = (Button) findViewById(R.id.like_button); 
    likeButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
     if(likeButton.isSelected()) 
       likeButton.setSelected(false); 
      else 
       likeButton.setSelected(true); 
     } 
    }); 

Вы должны включить в свой макет (XML)

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:color="@color/red" android:state_selected="true"/> 
<item android:color="@color/red" android:state_pressed="true"/> 
<item android:color="@color/normal" android:state_pressed="false"/> 
<item android:color="@color/normal"/> 
</selector> 

<Button 
     android:id="@+id/like_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/like" 
     android:layout_gravity="center" 
     android:text="@string/like" /> 

Cheers.