【Android TextView】图标下文字的显示

Android之TextView文字旁边有图标简化实现 在开发过程中,经常会遇到下图的情况 文字旁边有图标,如果将文字和图片用两个控件来实现就比较麻烦了,简单的方式就是用一个TextView来实现 TextView text = new TextView(getContext()); text.setCompoundDrawablesWithIntrinsicBounds(getResources().getDrawable(R.drawable.p... 阅读详情

序言:在日常开发中,业务提出了一个需求需要文本显示不下最多显示两行 并且在第二行末尾用省略号表示显示不下,还要接上一个图标 图标可以点击弹窗显示所有文字内容效果如下:

问题: 1、文本固定显示两行并且在末尾用省略号代替 2、末尾跟随可点击的图标

实现思路 1、首先末尾省略号我采取的是获取每一行的字数,然后根据需要展示的行数 累计 最后替换字符串 2、文本末尾跟上图标我们可以用SpannableStringBuilder 实现

获取每一行字数

Layout layout = textView.getLayout();
//获取textview的行数
int lineCount = layout.getLineCount();
if (lineCount == 0) {
    return;
}
if (StringUtils.isEmpty(text)) {
    return;
}
String result = "";
//lineEnd表示某一行最后一个字的下标记
int lineEnd = 0;
if (lineCount == 1) {
    lineEnd = layout.getLineEnd(0);
} else if (lineCount >= 2) {
    lineEnd = layout.getLineEnd(1);
}
if (lineEnd > 2) {
    result = text.substring(0, lineEnd - 2);
} 

省略号

SpannableStringBuilder spannableString = new SpannableStringBuilder();
spannableString.clear();
spannableString.append(result).append("...  "); 

跟上图标

//也可以这样
Drawable drawable = BaseApplication.getContext().getResources().getDrawable(icon);
drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
ImageSpan imageSpan1 = new ImageSpan(drawable);
spannableString.setSpan(imageSpan1, spannableString.length() - 2, spannableString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spannableString.setSpan(clickableSpan, spannableString.length() - 2, spannableString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(spannableString); 

图标可以点击需要用到clickableSpan 注意要想点击还必须设置

textView.setMovementMethod(LinkMovementMethod.getInstance());
//设置这个是为了在点击时没有按下效果
textView.setHighlightColor(BaseApplication.getContext().getResources().getColor(android.R.color.transparent)); 
ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View view) {
        //弹窗显示全部的文字内容 ,这儿根据需求不同可以不同处理
        OldUtils.getInstance().showWarn(text, title, context);
    }

    @Override
    public void updateDrawState(@androidx.annotation.NonNull TextPaint ds) {
        super.updateDrawState(ds);
        ds.setColor(BaseApplication.getContext().getResources().getColor(android.R.color.transparent));
    }
}; 

最后附上完整代码

/**
 * 用于textview 展示超出两行显示...并且在后面跟上图标
 *@param textview 展示内容的textview
 *@param icon 末尾图标
 *@param text 展示的内容
 *@param title 弹窗上需要展示的标题 没有可以不传
 *@param context 上下文
 */
public void setTextLineWithIcon(final TextView textView, final int icon, final String text, final String title
        , final Context context) {
    textView.setMovementMethod(LinkMovementMethod.getInstance());
    textView.post(new Runnable() {
        @Override
        public void run() {
            Layout layout = textView.getLayout();
            int lineCount = layout.getLineCount();
            if (lineCount == 0) {
                return;
            }
            if (StringUtils.isEmpty(text)) {
                return;
            }
            String result = "";
            int lineEnd = 0;
            if (lineCount == 1) {
                lineEnd = layout.getLineEnd(0);
            } else if (lineCount >= 2) {
                //当行数大于等于两行时取第二行末尾的下标 如果需要在第三行接图标可以用layout.getLineEnd(2); 这儿注意判断行数是否大于三行 不然这样取会崩溃
                lineEnd = layout.getLineEnd(1);
            }
            if (lineEnd > 2) {
                result = text.substring(0, lineEnd - 2);
            }
            SpannableStringBuilder spannableString = new SpannableStringBuilder();
            spannableString.clear();
            spannableString.append(result).append("...  ");
            ClickableSpan clickableSpan = new ClickableSpan() {
                @Override
                public void onClick(View view) {
                    //图标点击事件 根据需求不同 逻辑不同
                    OldUtils.getInstance().showWarn(text, title, context);
                }

                @Override
                public void updateDrawState(@androidx.annotation.NonNull TextPaint ds) {
                    super.updateDrawState(ds);
                    ds.setColor(BaseApplication.getContext().getResources().getColor(android.R.color.transparent));
                }
            };
            //也可以这样
            Drawable drawable = BaseApplication.getContext().getResources().getDrawable(icon);
            drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
            ImageSpan imageSpan1 = new ImageSpan(drawable);
            spannableString.setSpan(imageSpan1, spannableString.length() - 2, spannableString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
            spannableString.setSpan(clickableSpan, spannableString.length() - 2, spannableString.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
            textView.setText(spannableString);
            textView.setHighlightColor(BaseApplication.getContext().getResources().getColor(android.R.color.transparent));
        }
    });
} 

最后

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长。而不成体系的学习效果低效漫长且无助。时间久了,付出巨大的时间成本和努力,没有看到应有的效果,会气馁是再正常不过的。

所以学习一定要找到最适合自己的方式,有一个思路方法,不然不止浪费时间,更可能把未来发展都一起耽误了。

如果你是卡在缺少学习资源的瓶颈上,那么刚刚好我能帮到你。以上知识笔记全部免费分享,**如有需要获取知识笔记的朋友,可以点击下方二维码费领取。

Android02之TextView和Button 上一次我们对常用的两种布局方式——线性布局和相对布局进行了详细的讲解,相信大家也对基础的知识有了大概的认知。这一次我们讲解最常用的两种组件TextView和Button。这一次讲解的内容会比上次的内容更多,并且是建立在上一次的基础之上。不清楚布局方式的可以查看我的上一篇博客,链接为https://blog.youkuaiyun.com/chenpeixing361/article/details/890289... 阅读详情

相关推荐

Android TextView控件如何显示一行文本

在Android应用程序开发中,TextView是常用的界面元素之一,用于显示文本内容。有时候我们希望TextView只显示一行文本,而不管文本内容的长度。接下来,我们需要在Java代码中获取到这个TextView,并设置文本内容。运行应用程序,你将看到TextView只显示一行文本,并且如果文本内容过长,末尾会添加省略号。这就是如何在Android中实现TextView只显示一行文本的方法。以上代码将文本内容设置为"这是一行文本内容,如果内容太长会自动省略显示…属性来指定TextView只显示一行文本。

TechInk的博客 490

android 图片下面显示文字

自定义Android带图片的按钮 前言 现在移动设备的按钮设计讲究大图标小文字,希望用户只要一看到图标便能知道这个按钮是干嘛的,但又要有必要的文字提示,最常见的就数搜索按钮了,上面一个大大的放大镜图标,下面两个字——搜索。 Bill最近也在做具有这种效果的按钮,过程总是曲折的,不过结果总是美好滴~现在Bill把其做法分享给大家,希望对还不会的朋友有所帮助。 先看看bil

findsafety的专栏 4912

Mac用户福音:三步搞定PyMol开源版,告别许可证弹窗(附Homebrew/MacPorts安装指南)

本文为Mac用户提供三步安装PyMol开源版的详细指南,帮助科研人员告别许可证弹窗烦恼。通过Homebrew或MacPorts包管理器安装开源核心,并与商业版图形界面整合,实现无干扰的分子可视化研究体验。特别适合MacOS用户快速部署PyMol进行结构生物学分析。

weixin_28743405的博客 196

Android图片文字按钮

今天在整理资料的时候发现有个问题,原来做的些软件中用到的按钮,要么是纯文字的,要么是纯图片的突然看有款软件上的按钮文字可以同时显示,而且我用hierarchyviewer查看了下他确确实实是图片加文字的,所以问了下群友并且思考了下,总有以下解决方法1.直接用图片和文字的截图放在Imagebutton上显示,这种事最简单但是也是最占资源,以后修改和国家化都是最不方便的方法2.用button上设置图片的方法可以,这种简单,并且以后很容易修改 3.还有个方法也可以实现相同的效果textview.setCompou

muyu114的专栏 1万+

华为BEM战略解码体系完整版(85页PPT)(文末有下载方式)

在部门层面,战略解码的核心是将公司战略逐层分解到部门,确保部门目标能够有效支撑公司战略。战略解码的关键原则包括:对公司战略和业务目标的支撑、指标选取考虑部门责任特色、对公司业务流程的支撑、战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码,华为公司实现了从战略制定到执行的闭环管理,确保了战略目标能够通过可衡量的。战略解码体系的核心目标是将公司战略逐层分解,确保战略目标能够通过可衡量的。在公司层面,战略解码的第一步是战略澄清,明确公司的使命、愿景、战略目标及。

AI_data_cloud的博客 2403

C++ 程序稳定运行一段时间后异常中止?vc6 运行库的bug!!!

事件查看器提示:错误应用程序 xxxxxxx.exe,版本 0.0.0.0,错误模块 MSVCRTD.DLL,版本 6.0.9782.0,错误地址 0x00012b40。这是一个通信方面的软件,需要长期运行,在压力测试时,高负荷连续运行一定天数时必定崩溃,而且都是在msvcrtd.dll中崩溃。后来在dump文件中发现调用栈在是MSVCRTD.DLL模块,跟踪代码发现是在void * __cdecl _heap_alloc_dbg(        size_t nSize,        int nBloc

qingflying的专栏 2680

android文字在图片底下的按钮样式、textview太长的情况用省略号表示

限制最大长度517dp,一行,省略。

wy313622821的博客 7138

西门子S7-1200与FUNUC机器人MODBUS TCP通信

PLC与机器人通讯

Illusssion的博客 1万+

Android应用开发(5)文本视图(TextView)

本章介绍Android应用开发中文本视图(TextView)的显示,包括:设置文本内容、设置文本大小、设置文本显示颜色。

zsyf33078的专栏 4270

基于ROS2系统开发机器人

以上是基于ROS 2开发机器人的基本流程和一个简单的发布者-订阅者示例。通过这个流程,你可以逐步扩展和优化你的机器人系统,实现更复杂的功能。

xuweilin的博客 1496

Stata新手避坑:用reghdfe搞定行业、地区多重固定效应,告别‘共线性’报错

本文详细介绍了如何使用Stata中的reghdfe命令高效处理多重固定效应问题,解决传统方法在面板回归中遇到的共线性报错和低R²问题。通过实战案例和高级技巧,帮助新手快速掌握行业、地区等多维固定效应的控制方法,提升经济学和金融学研究的分析效率。

weixin_30635053的博客 422

Android textview 文字显示不下用省略号代替 并且接图标 ,图标可点击

序言:在日常开发中,业务提出了一个需求需要文本显示不下最多显示两行 并且在第二行末尾用省略号表示显示不下,还要接上一个图标 图标可以点击弹窗显示所有文字内容效果如下:问题: 1、文本固定显示两行并且在末尾用省略号代替 2、末尾跟随可点击的图标实现思路 1、首先末尾省略号我采取的是获取每一行的字数,然后根据需要展示的行数 累计 最后替换字符串 2、文本末尾跟上图标我们可以用SpannableStringBuilder 实现 省略号 跟上图标 图标可以点击需要用到clickableSpan 注意要想点击还必

Eqiqi的博客 2745

ROS从入门到精通2-1:机器人3D可视化工具——Rviz

本文详细介绍了Rviz是什么?为什么要使用这个工具?清晰地列出了Rviz的安装流程和界面的基本功能元素;讲解了Rviz基本数据类型与话题,并用两个实例深入理解Rviz数据可视化的过程

FRIGIDWINTER的博客 5348

[Android] TextView上同时显示图标和文字

需求场景 +----------------------------+ | Icon TEXT | +----------------------------+ 当然,可以使用LineLayout,包一个ImageView和一个TextView就可以了。 这里从性能角度出发,减少控件数量,直接在TextView上实现 <?xml version="1....

weixin_34149796的博客 788

[27] cuda 应用之 核函数实现图像通道变换

[27] cuda 应用之 核函数实现图像通道变换

yohnyang的博客 202

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Android开发入门组件(一)——TextView

最近在学习安卓开发,顺便把自己的学习笔记写在这里,按需自取哈,也是日后复习的一个路子。 先从基础的组件开始学习,第一个就是TextView,用来放文字显示的用,具体按下面来写 首先看一个完整的TextView的写法 <TextView android:id="@+id/tv1" android:layout_width="wrap_content...

Demo.demo的博客 540

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

安卓图标/图片对齐TextView的第一行文字

安卓图标/图片对齐TextView的第一行文字实现方法 实现方法 主要思路是用另一个TextView和你想要对齐的TextView设置一样的样式,但是文字内容是空的,设置他的drwableRight为你想要的图标或者图片,用线性布局器包起来就可以啦。 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andro

shitianxiang的博客 2513

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Android开发 TextView 文字和drawableLeft居中

Android开发 TextView 文字和drawableLeft居中我们在开发过程中经常会遇到这样的布局设计:文字左边一个图标 ,常用的做法是用一个RelativeLayout包裹一个ImageView和一个TextView,然后设置各自都垂直居中,如下:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="h

格物致知,敬事而信! 5002

安卓 图标加文字显示在一块

刚做安卓没多久,作为小白。 一个很常见的需求,图标+文字,网上一查发现七七八八的方法都比较麻烦(刚做安卓觉得UI比起html+css麻烦太多了吧,很多简单的样式调整就要写好多东西) 回归正题,最后发现TextView有这样一个属性: android:drawableTop="@mipmap/ic_video_setting" 效果是这样的,还有 android:drawableLeft android:drawableRight android:drawableBottom 顾名思义就是围绕文字的上下左右

lineFirends的博客 748

图标跟随TextView显示

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/too.

aygxylxk的专栏 328

【Android_Note】2-2 TextView

1.主界面 主界面代码:activity_main_textview.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_pare...

一只幸运的小猪猪的博客 192

AndroidのTextView之CompoundDrawable那些坑

TextView有几个属性android:drawableXXX,通常是在环绕文字周边显示一个图像,但是这有个坑就是文字和图片可能会对不齐。 纵使你设置gravity还是layout_gravity=center都没有任何效果。   一般在app的底部导航栏,会用RadioButton去实现。RadioGroup应该是一个线性布局,支持oratation属性可以横的也可以竖得排列。 既然是底

Bvin的专栏 1762

android 图标 textview,Android TextView添加图标ImageView

图标位于文字的左边LinearLayout mRoot;private void addNewContactView() {mRoot = (LinearLayout) findViewById(R.id.root);mNewContact = (TextView) findViewById(R.id.newContact);if(mMode == MODE_DEFAULT) {setNewCon...

weixin_39988930的博客 436

Android的TextView使用Html来处理图片显示、字体样式、超链接等

一、[Android实例]实现TextView里的文字有不同颜色转eoe:http://www.eoeandroid.com/thread-4496-1-1.htmlimport android.text.Html;TextView t3 = (TextView) findVie

angle_rupert 942

android TextView 可自定义图标的带角标文字组件

android TextView 可自定义图标的带角标文字组件

java_newbie_octopus的博客 2296
上一篇: 【Android GC】垃圾回收
下一篇: Android增量更新
不秃头de程序猿
博客等级 码龄5年 4089粉丝 1478原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值