TextView 字体过长解决方案(实现手动滚动字体)
- 今天碰到一个问题TextView 显示文本过长,内容必须还得看见,有的人说,这还不简单,让textview,设置marquee属性
让它自动滚动,你见过哪家app文本过长,都是让它滚动,搞得这么二吗,
还有一种方式,就是让它多行显示,这个,有时候布局的高度不一致,会影响美观。
- 最后,就是在网上看见的HorizontalView 嵌套textview,这种方法可行。但是,有时候有点坑。
先介绍这一种方法以及注意事项:
<HorizontalScrollView
android:layout_width="match_parent"android:layout_height="wrap_content"android:scrollbars="none"><TextView
android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!*******************************************************************************************" /></HorizontalScrollView>
- 切记textView width设置成wrap_content 要不不滚动,至于为什么,没有深究。
如果不想这么解决,还有就是自定义view,实现文本过长的时候滚动效果。下面直接上代码:public class HorizontalScrollTextView extends TextView {private TextPaint textPaint;private int viewWidth;//textview控件宽度private float mLastDownX;private Scroller mScroller;//利用scroller实现滚动效果private int textWidth;//文本的宽度public static final String TAG = HorizontalScrollTextView.class.getName();/*** 滑动的距离*/private int mMoveLen = 0;public HorizontalScrollTextView(Context context) {super(context);init(context);}public HorizontalScrollTextView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}private void init(Context context){mScroller = new Scroller(context);textPaint = getPaint();setEllipsize(null);setSingleLine();}private void smoothScrollTo(int destX,int destY){int scrollX = getScrollX();int delta = destX - scrollX;mScroller.startScroll(scrollX,0,delta,0,1000);invalidate();}@Overridepublic void computeScroll() {if(mScroller.computeScrollOffset()){scrollTo(mScroller.getCurrX(),mScroller.getCurrY());postInvalidate();}}public HorizontalScrollTextView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}@Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {super.onMeasure(widthMeasureSpec, heightMeasureSpec);viewWidth = getMeasuredWidth();initTextWidth();Log.e(TAG,"measuredwidth:"+viewWidth);Log.e(TAG,"textwidth:"+textWidth);}private void initTextWidth(){Rect rect = new Rect();textPaint.getTextBounds(getText().toString(),0,getText().length(),rect);textWidth = rect.right - rect.left+getPaddingRight()+getPaddingLeft();}@Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getActionMasked()) {case MotionEvent.ACTION_DOWN:doDown(event);break;case MotionEvent.ACTION_MOVE:doMove(event);break;case MotionEvent.ACTION_UP:doUp(event);break;default:break;}return true;}private void doDown(MotionEvent event){if(viewWidth < textWidth){mLastDownX = event.getX();}}private void doMove(MotionEvent event){if(viewWidth < textWidth){//当viewWidth < textWidth 说明文本比控件长 此时是滑动字体的情况满足mMoveLen += (event.getX() - mLastDownX);//记录滑动方向int moveMaxLen = textWidth - viewWidth;//记录滑动的最大距离Log.e(TAG,"doMove: mMoveLen:"+mMoveLen+" moveMaxLen:"+moveMaxLen);if(mMoveLen < 0){//向左滑动时候 让它向左滚动 moveMaxLen的距离,刚好把文本显示完全smoothScrollTo(moveMaxLen,getScrollY());return;}else{//向右滑动的时候,让内容滚动到初始位置smoothScrollTo(0,getScrollY());return;}}//setEllipsize();}private void doUp(MotionEvent event){}}
-就这么几行代码就搞定了,现在不支持gravity = center的情况。支持padding
这么丑的代码是我自己写的,所以没有链接可以给,有什么好的建议,欢迎。
TextView 字体过长解决方案(实现手动滚动字体)相关推荐
- JS图片自动或者手动滚动效果(支持left或者up)
JS图片自动或者手动滚动效果 在谈组件之前 来谈谈今天遇到搞笑的事情,今天上午接到一个杭州电话 0571-28001187 即说是杭州人民法院的 貌似说我用招商银行信用卡在今年的6月23日借了招商银行 ...
- Android 滑动侧边栏(Sliding Menu)第一种实现 - 1 手动滚动+自动滚动
之前的分析与一种解决方案,当前例子未充分考虑处理Touch事件,之后会接着完善例子. <Android 滑动侧边栏(Sliding Menu)实现分析> <Android 滑动侧边栏 ...
- 彻底变换PreferenceFragment样式和全局设置字体样式的解决方案
一.PreferenceFragment样式修改 新样式 直接上图,原样式为白色样式,即为PreferenceFragment的默认样式: ① 白底黑字:② SwitchPreference开关默认为 ...
- Flash中文字体嵌入终极解决方案
Flash中文字体嵌入终极解决方案 http://www.xiumu.org/technology/flash-chinese-characters-embedded-in-the-ultimate- ...
- QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置
QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置 参考文章: (1)QT 中 界面中消息的停留时间解决方案 以及 label 中字体大小和换行设置 (2)https:// ...
- 该文件夹包含名称过长 解决方案
该文件夹包含名称过长 解决方案 参考文章: (1)该文件夹包含名称过长 解决方案 (2)https://www.cnblogs.com/cao-zhen/p/9871437.html 备忘一下.
- Android TextView 设置文字背景色或文字颜色,字体阴影,字体样式
String str="这是设置TextView部分文字背景颜色和前景颜色的demo!"; int bstart=str.indexOf("背 ...
- 在网页中嵌入任意字体(特殊字体/自定义字体)的解决方案
在网页中嵌入任意字体(特殊字体/自定义字体)的解决方案 参考文章: (1)在网页中嵌入任意字体(特殊字体/自定义字体)的解决方案 (2)https://www.cnblogs.com/yuwenson ...
- ora-01489 字符串连接的结果过长 解决方案
ora-01489 字符串连接的结果过长 解决方案 参考文章: (1)ora-01489 字符串连接的结果过长 解决方案 (2)https://www.cnblogs.com/iupoint/p/10 ...
最新文章
- 松本行弘:我的编程人生
- linux 静态编译 glibc,GCC静态链接glibc库
- 还是畅通工程(1233 并查集+kruskal)
- 京东秒杀系统模块的Redis分布式锁深度剖析,没给你讲明白你打我
- 小女生的Linux技术~~~Linux常识~~21-30
- java返回特定下标元素_java基础--输出数组中指定元素的下标
- 单片机定时器_单片机定时器/计数器基本原理
- 将摄像头拍摄图像或者本地图片设置为头像的方法
- 流量分析的瑞士军刀:Zeek
- MySQL:Specified key was too long; max key length is 1000 bytes
- 脉冲控制仪C语言程序,可编程脉冲控制仪
- 给Metasploit安装无Lorcon2线支持模块
- CSV 导入SQL Server(bulk insert方式)
- 《软件工程》第5章系统建模
- 拆弹实验-phase_6
- 企业单位Win 10家庭版如何打开Guest用户,并共享打印机
- DPPO:Distributed Proximal Policy Optimization
- vscode打开项目从中文界面变成英文界面的问题
- 一步步教你接入个推 推送
- Ruby on Rails的核心特性是什么?
热门文章
- 音视频开发-SRS 4.0开发环境搭建丨webrtc丨FFmpeg丨SRS流媒体服务器开发
- dalvik启动过程
- IQ, EQ, CQ, AQ, BQ, NQ, FQ, DQ, SQ, MQ 十商
- Number、parseInt和parseFloat的区别
- 音视频高级开发——如何快速学习FFmpeg丨ffplay、ffmpeg命令如何编程实现
- 鸿蒙os2无法使用时钟,mate30pro鸿蒙系统无法加载时钟小部件
- c++ socket 多客户并发访问传输文件_Nginx:论高并发,在座各位都是渣渣
- 自学了两年自动化门都没入?资料收藏家的名汇倒是锤实了,附入门教程...
- 台式电脑拍照软件_电脑维护的几点注意
- condarc怎么修改_怎么修改pip源和conda源