0

シンプルなレイアウトに が 1 つだけ含まれていますTextView

TextViewImageSpanを使用して画像を読み込みたい。

以下のメソッドは以下を作成しますSpannable:

private Spannable getImageSpannable(int drawableId, int targetWidth, int targetHeight) {

    Bitmap originalBitmap = BitmapFactory.decodeResource(getResources(), drawableId);

    Bitmap bitmap = Bitmap.createScaledBitmap(originalBitmap, targetWidth, targetHeight, true);
    Drawable dr = new BitmapDrawable(getResources(), bitmap);
    dr.setBounds(0, 0, bitmap.getWidth(), bitmap.getHeight());

    Spannable imageSpannable = new SpannableString("\uFFFC");
    ImageSpan imgSpan = new ImageSpan(dr, DynamicDrawableSpan.ALIGN_BOTTOM);

    imageSpannable.setSpan(imgSpan, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return imageSpannable;
}

この方法を使用して、次のようなコンテンツを作成します。

public void setContent() {

    SpannableStringBuilder content = new SpannableStringBuilder();
    content.append(getImageSpannable(R.drawable.my_image, 100, 260));
    content.append("\n");

    txtContent.setText(content);
}

メソッドを呼び出すとsetContent()、結果は次のようになります。

ImageSpan 上の小さなギャップ

ご覧のとおり、ImageSpan と の上部の間に小さなギャップがありTextViewます。

行間隔を 0 に設定しているため、これは行間隔ではありません。

そして興味深い点は、コンテンツから "\n" を削除すると (setContent メソッドで宣言されている)、このスペースがなくなることです。

もう1つのポイントは、を使用してコンテンツサイズを測定しようとしたときにStaticLayout、行0の最後に「\ n」があると270を返し、「\ n」がない場合は260を返すことです.

StaticLayoutテキストと ImageSpan を使用して測定し、 に適合するかどうかを判断する必要があるため、この動作は私にとっていくつかの問題を引き起こしますTextView

みんなが私を助けてくれることに感謝します。

ありがとう。

ここに私のxmlがあります

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<TextView
    android:id="@+id/txtContent"
    android:layout_width="300dp"
    android:layout_height="500dp"
    android:background="#fed9f4"
    android:textSize="22sp"/>
</LinearLayout>

いくつかのテストを行ったところ、フォント サイズが ImageSpan のレンダリングに影響することがわかりました。

誰かがこの影響を説明できますか?

4

1 に答える 1

-1

この方法がうまくいくことを願っています

次のコード行

public void setContent() {

    SpannableStringBuilder content = new SpannableStringBuilder();
    content.append(getImageSpannable(R.drawable.my_image, 100, 260));
    content.append("\n");

    txtContent.setText(content);
}

への変更

public void setContent() {

    SpannableStringBuilder content = new SpannableStringBuilder();
    content.append(getImageSpannable(R.drawable.my_image, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    content.append("\n");

    txtContent.setText(content);
}

「R.drawable.my_image」のサイズを変更します

于 2017-01-02T07:13:07.620 に答える