如何判断当前屏幕TextView是否会自动换行_Android提高篇(Java)

文 | Promise Sun


1.场景描述:

有很多时候,产品或者UI会有各种奇葩要求,开发人员就得无条件满足。“真的很气哦!”
比如产品说:“当手机屏幕内一行可以显示下所有文字内容时需要第1种UI效果显示;当手机屏幕内一行显示不下文字内容时,需要换其他(第2种)UI效果展示,自动换行太丑……”。
注:文字内容不固定,不要自动换行的效果。第1种UI效果和第2种UI效果是完全不同的两种效果。)

2. 分析:

面对这样的需求,也不难。其实,就是根据当前手机屏幕的文字所在的TextView,去计算出所有文字内容显示出的宽度与TextView显示出的宽度,判断出文字是否会自动换行,然后在对应逻辑下做不同的UI显示就可以了。

3. 功能实现

1)首先,在布局文件xml中,需要给文字内容所在的TextView设置属性

android:ellipsize="end"

2)然后,通过addOnGlobalLayoutListene()方法判断是否触发属性ellipsize="end",再根据文本宽度是否大于TextView控件宽度,判断出是否文字内容会自动换行,在Activity或者Fragment中设置不同的UI效果。

    public  void textViewOverFlowed(final TextView textView) {
        ViewTreeObserver vto = textView.getViewTreeObserver();
        vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @SuppressWarnings("deprecation")
            @Override
            public void onGlobalLayout() {
                textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);
                textView.getHeight();
                double widthView = textView.getWidth();//控件宽度
                double widthTextStr= textView.getPaint().measureText(textView.getText().toString());//文本宽度
                LogUtil.e("文本宽度=============="+widthTextStr+"   控件宽度=============="+widthView);
                if (widthTextStr > widthView) {//文本会自动换行
                    //此处显示需要换行时的第2种UI效果
                } else {//文本无需换行
                    //此处显示无需换行时的第1种UI效果
                }
            }
        });
    }

猜你喜欢

转载自blog.csdn.net/Sun_2134/article/details/124501361