我的文字长度不确定,TextView
文字android:layout_width="match_parent"
和android:layout_height="wrap_content"
。在我的RecyclerView.Adapter
onBindViewHolder
内,我需要计算给定文本是否适合作为单行的给定TextView
,或者是否需要多行(在这种情况下,我有要求更改用户界面。)
我知道如何找出文字宽度:
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder viewHolder, final int position) {
HeaderViewHolder holder = (HeaderViewHolder) viewHolder;
String text = mSelectedItem.getText();
Paint paint = holder.textview.getPaint();
Rect bounds = new Rect();
paint.getTextBounds(text, 0, text.length(), bounds);
Log.d(TAG,"bounds w: "+bounds.width());
Log.d(TAG,"bounds h: "+bounds.height());
}
但是,我不确定这将是一个有效的前进方向。文本高度对我来说没什么用,因为边界只显示单行文本的高度。
我在考虑测量TextView的父元素的宽度,并比较文本宽度是否大于父宽度:
View v = (View) holder.textview.getParent();
v.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
Log.e(TAG,"parent width "+v.getMeasuredWidth());
然而,当我的整个布局层次结构的宽度设置为match_parent
并且我在Nexus 5上进行测试时,它会返回522的奇怪结果,因此值应该在1080左右。我得到的值相同我试图衡量我的RecyclerView
。此外,我认为效率低,因为它需要额外的测量周期。
我也试过了:
ViewGroup parentView = ((ViewGroup) holder.textview.getParent());
double parentWidth = parentView.getWidth() - parentView.getPaddingLeft() - parentView
.getPaddingRight();
哪个好,但只在第一次通过后,这显然不够好。
有关更好地确定给定文本是否适合TextView单行的任何建议吗?
修改
更新了代码段