Ответ 1
Взгляните сюда: http://developer.android.com/reference/android/content/res/ColorStateList.html
У меня есть текстовое поле, которое ведет себя как локальная ссылка, щелкая по нему, извлекает изображение из базы данных и показывает его. Он не выполняет ping на сервере все время.
Вот код xml для текстового представления
<TextView android:layout_marginLeft="2dp" android:linksClickable="true"
android:layout_marginRight="2dp" android:layout_width="wrap_content"
android:text="@string/Beatles" android:clickable="true" android:id="@+id/Beatles"
android:textColor="@color/Black"
android:textSize="12dp" android:layout_height="wrap_content" android:textColorHighlight="@color/yellow" android:textColorLink="@color/yellow" android:autoLink="all"></TextView>
Вопрос в том, хочу ли я видеть, что цвет текстового представления должен быть изменен желтым, вместо того же черного цвета,
Просто как поведение кнопки, но вместо изменения цвета фона я хочу изменить цвет текста
Взгляните сюда: http://developer.android.com/reference/android/content/res/ColorStateList.html
Мне нравится то, что предлагает Кристиан, но расширение TextView кажется излишним. Кроме того, его решение не обрабатывает событие MotionEvent.ACTION_CANCEL
, что позволяет предположить, что ваш текст останется выбранным даже после нажатия.
Чтобы добиться этого эффекта, я внедрил свой собственный onTouchListener в отдельный файл:
public class CustomTouchListener implements View.OnTouchListener {
public boolean onTouch(View view, MotionEvent motionEvent) {
switch(motionEvent.getAction()){
case MotionEvent.ACTION_DOWN:
((TextView)view).setTextColor(0xFFFFFFFF); //white
break;
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_UP:
((TextView)view).setTextColor(0xFF000000); //black
break;
}
return false;
}
}
Затем вы можете назначить это любому TextView, который вы хотите:
newTextView.setOnTouchListener(new CustomTouchListener());
Вы можете создать свой собственный класс TextView, который расширяет класс TextView
Android и отменяет onTouchEvent(MotionEvent event)
Затем вы можете изменить цвет текста экземпляров на основе переданного MotionEvent.
Например:
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// Change color
} else if (event.getAction() == MotionEvent.ACTION_UP) {
// Change it back
}
return super.onTouchEvent(event);
}