Написал калькулятор, в котором для обработки нажатий используется интерфейс OnClickListener. Внешний вид калькулятора прописал в xml файле, а в файле джава уже написал реализацию работы. При нажатии на кнопку она меняет цвет на черный. Работает это через метод v.setBackgoundColor(Color.BLACK). Но когда это происходит текст на кнопке сливается с фоном и теряется. Для задачи цвета текста на кнопке в xml есть атрибут textColor. Есть ли его аналог для программного изменения цвета текста во время нажатия кнопки? P.s. Моя реализация через метод setBackgroundColor() изменяет цвет кнопки, пока не будет нажата другая кнопка. Есть ли способ заставить ее изменять цвет, только пока палец касается ее?
Стоило задать вопрос и я смог ответить на него сам. Загвоздка заключалась в том что метод setBackgroundColor() применялся к типу View без его приведения к другому типу(например Button), а вот метод setTextColor к типу View уже нельзя применить, и сначала необходимо выполнить преобразование ((Button) v).setTextColor() и тогда все заработает. Но учитывая что я хотел чтобы цвет менялся только на время касания, удобнее оказалось добавить обработчик OnTouchListener и переопределить метод onTouch:
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
((TextView) v).setTextColor(Color.WHITE);
v.setBackgroundColor(Color.BLACK);
return false;
}
if(event.getAction() == MotionEvent.ACTION_UP){
((TextView) v).setTextColor(Color.BLACK);
v.setBackgroundColor(Color.WHITE);
return false;
}
return false;
}
Важная деталь - если поставить возвращаемое значение true, то действие не дойдет до слушателя OnClickListener и написанный в нем код не выполнится. Если у вас есть одновременно 2 этих обработчика, обязательно поставьте возвращаемое значение false
btn.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: // нажатие
btn.setTextColor(Color.parseColor("#AF1F3F"));
break;
case MotionEvent.ACTION_UP:
btn.setTextColor(Color.parseColor("#000000"));
break;// отпускание
}
return false;
}
});
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Разрабатываю игру в качестве обученияВся игра идет через кнопки
Сделал кастомный адаптер для спиннераПри раскрытии спиннера метод getDropDownView вызывается непрерывно циклически, даже если список не трогать
Делаю приложение для конференций, хочу реализовать в ней новости и программу событийСайта нет, и писать его с нуля не хочется
Настроил sphinx , проиндексировалВ общем все работает , но только через консоль