Я фактически создал небольшой класс, чтобы сделать это намного проще: ClickTextView .Вы можете скопировать и вставить его в свой проект, и Android Studio должна исправить это.
public class ClickTextView extends android.support.v7.widget.AppCompatTextView {
Rect rect;
public ClickTextView(Context context) {
super(context);
init();
}
public ClickTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public ClickTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init(){
setClickable(true);
rect = new Rect();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_DOWN
|| action == MotionEvent.ACTION_HOVER_ENTER){
this.setTypeface(Typeface.DEFAULT_BOLD);
getHitRect(rect);
}else if (action == MotionEvent.ACTION_MOVE){
boolean inView = rect.contains(getLeft() + (int) event.getX(), getTop() + (int) event.getY());
this.setTypeface(inView ? Typeface.DEFAULT_BOLD : Typeface.DEFAULT);
}else if (action == MotionEvent.ACTION_UP
|| action == MotionEvent.ACTION_CANCEL
|| action == MotionEvent.ACTION_HOVER_EXIT
|| action == MotionEvent.ACTION_OUTSIDE) {
this.setTypeface(Typeface.DEFAULT);
}
return super.onTouchEvent(event);
}
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (focused) this.setTypeface(Typeface.DEFAULT_BOLD);
else this.setTypeface(Typeface.DEFAULT);
}
}
Это также обеспечивает решение для случая, когда пользователь щелкает ваш вид, но тащит палец за пределы границ вида.Если выпущено там, Android не будет регистрировать щелчок, поэтому текст также не должен быть жирным шрифтом.
Не стесняйтесь использовать его где угодно.