2025年2月24日 星期一 甲辰(龙)年 腊月廿四 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > 安卓(android)开发

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

时间:10-29来源:作者:点击数:19
城东书院 www.cdsy.xyz

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效果
  • }
  • }
  • });
  • }
城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐