android获取字符串的长度
2013-11-05 17:00
253 查看
需求是这样的:我想要动态的获取一个textview上文字的长度,因为我的文字有好多种语言,每种语言的长度不一样,导致显示的不是很好,我喜欢根据textview的长度动态设置。
1)最开始发现了这个,用了第二个办法,似乎不太准确。
http://blog.csdn.net/chuekup/article/details/7518239
后来根据同事的帮助,又尝试下面的方法,似乎还是不太对,待以后深究把。。。
Paint mPaint = new Paint();
mPaint.setTextSize(14);
mPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.NORMAL));
int ww = (int) mPaint.measureText(mFileNameEt.getText().toString(), 0, mFileNameEt
.getText().length());
System.out.println("ww = " + ww);
2)后来发现这个,似乎也不是很准确
http://tech.ddvip.com/2013-01/1358513327189188.html
3)最后发现了这个,很准确,最后用的是这种方法,自行参考:
http://blog.sina.com.cn/s/blog_54109a580101beiw.html
mFileNameHint = (TextView) view.findViewById(R.id.file_name_hint);
TextPaint paint = mFileNameHint.getPaint();
int width = (int) Layout.getDesiredWidth(mFileNameHint.getText().toString(), 0,
mFileNameHint.getText().length(), paint);
System.out.println("width = " + width + " dip2px(this.getActivity(), 15); = "
+ dip2px(this.getActivity(), 15));
mFileNameEt.setPadding(width + dip2px(this.getActivity(), 15), mFileNameEt.getPaddingTop(),
mFileNameEt.getPaddingRight(),
mFileNameEt.getPaddingBottom());
字符串显示时的宽度通过字符串的个数/长度是没有办法取得
因为涉及到字体,大小,全角/半角,
甚至英文字i和T的宽度也是截然不同的。
使用下面的方法, 可以取得字符串显示的宽度。
TextPaint paint = view.getPaint();
int width = Layout.getDesiredWidth(source, start, index, paint);
TextView view是显示字符串的TextView
CharSequence source 是字符串配列
int start是开始位置。
int index是字符个数
参考:http://chen2337.blog.163.com/blog/static/34039920201173335056/
========================================================================================
2014-2-28号更新:
今天发现这篇文章也提到了一个方法,我没试,不知道可否,不过从android原生代码中发现的,应该不会有问题。
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0409/1144.html
刚刚去Calender这个项目目录下却是看到这个方法了~
1)最开始发现了这个,用了第二个办法,似乎不太准确。
http://blog.csdn.net/chuekup/article/details/7518239
后来根据同事的帮助,又尝试下面的方法,似乎还是不太对,待以后深究把。。。
Paint mPaint = new Paint();
mPaint.setTextSize(14);
mPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.NORMAL));
int ww = (int) mPaint.measureText(mFileNameEt.getText().toString(), 0, mFileNameEt
.getText().length());
System.out.println("ww = " + ww);
2)后来发现这个,似乎也不是很准确
http://tech.ddvip.com/2013-01/1358513327189188.html
3)最后发现了这个,很准确,最后用的是这种方法,自行参考:
http://blog.sina.com.cn/s/blog_54109a580101beiw.html
mFileNameHint = (TextView) view.findViewById(R.id.file_name_hint);
TextPaint paint = mFileNameHint.getPaint();
int width = (int) Layout.getDesiredWidth(mFileNameHint.getText().toString(), 0,
mFileNameHint.getText().length(), paint);
System.out.println("width = " + width + " dip2px(this.getActivity(), 15); = "
+ dip2px(this.getActivity(), 15));
mFileNameEt.setPadding(width + dip2px(this.getActivity(), 15), mFileNameEt.getPaddingTop(),
mFileNameEt.getPaddingRight(),
mFileNameEt.getPaddingBottom());
字符串显示时的宽度通过字符串的个数/长度是没有办法取得
因为涉及到字体,大小,全角/半角,
甚至英文字i和T的宽度也是截然不同的。
使用下面的方法, 可以取得字符串显示的宽度。
TextPaint paint = view.getPaint();
int width = Layout.getDesiredWidth(source, start, index, paint);
TextView view是显示字符串的TextView
CharSequence source 是字符串配列
int start是开始位置。
int index是字符个数
参考:http://chen2337.blog.163.com/blog/static/34039920201173335056/
========================================================================================
2014-2-28号更新:
今天发现这篇文章也提到了一个方法,我没试,不知道可否,不过从android原生代码中发现的,应该不会有问题。
http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0409/1144.html
我从日历calendar代码的dayview类中找到了实现这一功能的方法: private int computeMaxStringWidth(int currentMax, String[] strings, Paint p) { float maxWidthF = 0.0f; int len = strings.length; for (int i = 0; i < len; i++) { float width = p.measureText(strings[i]); maxWidthF = Math.max(width, maxWidthF); } int maxWidth = (int) (maxWidthF + 0.5); if (maxWidth < currentMax) { maxWidth = currentMax; } return maxWidth; } 这里面关键的是p.measureText()方法,他返回的应该是px为单位的int类型。
刚刚去Calender这个项目目录下却是看到这个方法了~
相关文章推荐
- Android 露珠/水滴 拖拽 效果实现
- 【android开发】手机应用管理器的实现之获取应用列表(一)
- 留着自己用,android中gridview的一些属性
- Android调试错误-Conversion to Dalvik format failed with error 1
- android animator
- android broadcast
- android statusbar expand 条解析
- android Toast重复提示
- DDMS 检测不到 android 设备(红米手机)。
- android activity的启动模式
- 开发者必知:提升Android应用开发性能的十大要点
- android---获取设备相关信息
- Android Intent应用,打开网页,安装程序,打电话,打开地图等功能
- Android测试工具小结
- Android 发送短信
- Android获取手机内置外置存储文件列表,完美解决各种rom各种系统版本的获取方式不用的问题
- android 图片点击变暗的另一种办法
- 【Android】Android中的数据传递(2)
- Android之最简单的ImageView加边框方法
- android 可滑动的DatePicker和点击的DatePicker