日常工作中,我们有时候需要知道一个 TextView 一行最多显示几个字符,这里提供两个方法(这两个方法都需要知道 TextView 的宽度)
方法一:
/**
* 获取textview一行最大能显示几个字(需要在TextView测量完成之后)
*
* @param text 文本内容
* @param paint textview.getPaint()
* @param maxWidth textview.getWidth()/或者是指定的数值,如200dp
* @return
*/
private int getLineMaxNumber(String text, TextPaint paint, float maxWidth) {
if (null == text || "".equals(text)) {
return 0;
}
//得到文本内容总体长度
float textWidth = paint.measureText(text);
// textWidth
float width = textWidth / text.length();
return maxWidth / width;
}
上面这个方法不太精确,不过比较适合在 RecyclerView 或 ListView 里面使用,避免生成太多对象
(该方法抄自 一叶飘舟的blog 的修改)
方法二:
/**
* 获取textview一行最大能显示几个字(需要在TextView测量完成之后)
*
* @param text 文本内容
* @param paint textview.getPaint()
* @param maxWidth textview.getMaxWidth()/或者是指定的数值,如200dp
*/
private int getLineMaxNumber(String text, TextPaint paint, int maxWidth) {
if (null == text || "".equals(text)) {
return 0;
}
StaticLayout staticLayout = new StaticLayout(text, paint, maxWidth, Layout.Alignment.ALIGN_NORMAL
, 1.0f, 0, false);
//获取第一行最后显示的字符下标
return staticLayout.getLineEnd(0);
}
利用 StaticLayout 可以非常轻松的得到一行可以显示的最大字符数
本文提供了两种方法来确定TextView中一行可以显示的最大字符数。方法一通过计算文本平均宽度得出大概值,适用于RecyclerView或ListView;方法二利用StaticLayout精确获得字符数。

5226

被折叠的 条评论
为什么被折叠?



