日常工作中,我们有时候需要知道一个 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
可以非常轻松的得到一行可以显示的最大字符数