我现在正尝试在TextView中以某种方式重叠文本来解决问题。 I've posted a question about that,但我也试过自己解决。我决定计算导致textview打破这一行的文本量。我想出了这个未经修改的代码,它基本上应该给视图充气,根据显示的大小设置它的布局参数,然后运行onmeasure并返回lineCount。我计划使用可能的二进制搜索来找到适合textview的确切文本长度,但是在我尝试运行代码并查看它的行为之前。这有点奇怪,因为它给我的结果不同于我在屏幕上看到的结果。我甚至试图根据缩放密度来改变文本大小,因为我不确定它是否被考虑在内。
这是代码。它返回三个,但是当我将布局渲染到屏幕时,文本只占用两行。
public int getCountOfLines(Context context, int widgetDp){
LayoutInflater mLayoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout layout = (LinearLayout) mLayoutInflater.inflate(R.layout.event_basic_large ,null, false);
TextView titleTextView = (TextView) layout.findViewById(R.id.itemTitle);
titleTextView.setText(TEST_TEXT);
float density = context.getResources().getDisplayMetrics().density;
float textDensity = context.getResources().getDisplayMetrics().scaledDensity;
titleTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX, titleTextView.getTextSize()/density*textDensity);
layout.setLayoutParams(
new LinearLayout.LayoutParams(
(int) (widgetDp*density),
ViewGroup.LayoutParams.WRAP_CONTENT)
);
layout.measure(View.MeasureSpec.makeMeasureSpec(
(int) (widgetDp*density), View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
);
Log.d(TAG, titleTextView.getLineCount() + " lines, width "+titleTextView.getMeasuredWidth());
return titleTextView.getLineCount();
}
答案 0 :(得分:1)
我跑了一会儿,经过搜索和尝试后终于得到了以下功能:
public int getLineCount(String testString, float textSize,
float width) {
Rect bounds = new Rect();
Paint paint = new Paint();
paint.setTypeface(<font>);//set font that you are using for this
paint.setTextSize(textSize);
paint.getTextBounds(testString, 0, testString.length(), bounds);
return (int) Math.ceil(bounds.width() / width);
}
此函数使用textSize和width来给出行数。 此函数在显示之前给出textview中的行数。