计算文本是否会在onBindViewHolder

时间:2016-11-28 17:48:58

标签: android textview

我的文字长度不确定,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单行的任何建议吗?

修改

更新了代码段

0 个答案:

没有答案