android-layout - 在代码中,我从屏幕上看到的,为什么在运行 TextView.measure() 时获得不同的结果

  显示原文与译文双语对照的内容

现在,我正在尝试解决TextView中的某些文本重叠的问题。 我已经发布了关于那个问题的问题,但我也试图解决这个问题。 我决定计算导致textview中断行的文本数量。 我出现了这个未打破的代码,基本上应该将视图设置为 and,然后按照显示的大小运行onMeasure并返回 and 。 我计划使用可以能的二进制搜索来找到合适的文本长度,但是在我尝试运行代码之前。 这有点怪,因为它给了我不同的结果,比我在屏幕上看到的。 我甚至试图根据缩放密度来改变 inode,因为我不确定它是否被考虑到了。

下面是代码。它返回3,但当我将布局呈现到屏幕时,文本只占两行。


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();
}

时间: 作者:

我在后面进行了一段时间的搜索,并在搜索后尝试了解以下功能:


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中的行数,然后再显示。

作者:
...