Android, как сделать текст TextView жирным при нажатии или фокусировке - PullRequest
7 голосов
/ 14 февраля 2011

У меня есть текстовое представление в моем макете. Мое требование - когда я нажимаю или фокусирую его, текст должен быть жирным. В противном случае это должно быть с нормальным шрифтом. Как я могу это реализовать?

Ответы [ 2 ]

13 голосов
/ 14 февраля 2011

Используйте код ниже

TextView name=((TextView)findViewById(R.id.TextView01));


name.hasFocus();
        name.setOnFocusChangeListener(new View.OnFocusChangeListener() {

            public void onFocusChange(View v, boolean hasFocus) {
                // TODO Auto-generated method stub
                if(hasFocus)
                    ((TextView)findViewById(R.id.TextView01)).setTypeface(Typeface.DEFAULT_BOLD);
                else
                    ((TextView)findViewById(R.id.TextView01)).setTypeface(Typeface.DEFAULT);

            }
        });

        name.setOnTouchListener(new View.OnTouchListener() {

            public boolean onTouch(View v, MotionEvent event) {
                ((TextView)findViewById(R.id.TextView01)).setTypeface(Typeface.DEFAULT_BOLD);
                return false;

}});

1 голос
/ 20 января 2017

Я фактически создал небольшой класс, чтобы сделать это намного проще: 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 не будет регистрировать щелчок, поэтому текст также не должен быть жирным шрифтом.

Не стесняйтесь использовать его где угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...