0

我有一个ListView,项目是一个TextView。当我只使用字符串时效果很好。TextView添加时布局错误ImageSpan。跟随是我的代码。初始化一个列表视图

private void initListView()
{
    SpannableString spannableString1 = replaceEmotion(this, "[Android]", 0);
    SpannableString spannableString2 = replaceEmotion(this, "123456123456123456", 0);
    for (int i = 0; i < 140; i++)
    {
        int t = (int) (Math.random() * 2);

        if (t % 2 == 0)
        {
            listData.add(spannableString1);
        }
        else
        {
            listData.add(spannableString2);
        }
    }
    listItemAdapter = new ArrayAdapter<>(this, R.layout.item_list, listData);
}

将字符串替换为 ImageSpan。

    public SpannableString replaceEmotion(Context context, String content, int length)
    {
        if (length < 0)
        {
            length = 0;
        }
        SpannableString result = new SpannableString(content);
        if (context == null || content == null)
        {
           return null;
        }
        int start = length;
        int end;
        while ((start = content.indexOf("[", start)) != -1 && (end = content.indexOf("]", start)) != -1)
        {
            String img = content.substring(start, end + 1);
            if ("[Android]".equals(img))
            {
                Drawable drawable = context.getResources().getDrawable(R.mipmap.ic_launcher);
                if (drawable != null)
                {
                   drawable.setBounds(0, 0, (int) context.getResources().getDimension(R.dimen.fab_margin) * 3,
                                            (int) context.getResources().getDimension(R.dimen.fab_margin) * 3);
                   ImageSpan span = new ImageSpan(drawable);
                   result.setSpan(span, start, end + 1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                 }
            }  
            start++;
         }
      return result;
  }

在此处输入图像描述

我曾尝试 requestLayout,但它不起作用。

4

2 回答 2

0
<LinearLayout
    android:id="@+id/cotainer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:visibility="visible"/>
</LinearLayout>

我通过将上面更改为下面来解决它。

<LinearLayout
    android:id="@+id/cotainer"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="visible"/>
</LinearLayout>

yes.only TextView android:layout_width="match_parent" 到 android:layout_width="wrap_content"

于 2016-08-02T06:30:29.073 回答
0

根据结果​​的外观,我猜即使内容发生了变化,框架也不会更新“回收” TextView 的高度。实际上,它不会更新 TextView 正在使用的 Layout 对象。您能否尝试将 TextView 的 layout_width 设置为“wrap_content”?它将强制 TextView 重新计算(并重新创建)布局对象。

于 2016-08-16T08:29:05.207 回答