如何使ImageSpan在TextView中与其余文本具有相同的高度

4

我曾经使用Unicode在TextView中显示一些图像符号。

然而,不久之后,我意识到Unicode图像符号在所有设备上看起来并不相同。

于是我决定利用ImageSpan

首先,我创建了一个向量图像,图像边框周围没有填充。

enter image description here

然后,我应用了以下代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    TextView textView = findViewById(R.id.text_view);

    SpannableString ss = new SpannableString("abF\u2611 ");

    Drawable d = ContextCompat.getDrawable(this, R.drawable.ic_if_check_box_outline_326561);

    d.setTint(textView.getCurrentTextColor());

    float height = textView.getPaint().getFontMetrics().descent - textView.getPaint().getFontMetrics().ascent;

    d.setBounds(0, 0, (int)height, (int)height);

    ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);

    ss.setSpan(span, 4, 5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

    textView.setText(ss, TextView.BufferType.SPANNABLE);
}

这是我的结果。
这里是我的版本:enter image description here 我希望我的 ImageSpan 版本的高度与 Unicode 版本相同,但似乎不行。
float height = textView.getPaint().getFontMetrics().descent - textView.getPaint().getFontMetrics().ascent;

这并没有真正帮助。

你有什么建议能够实现吗?我在这里发布我的SVG图像,以防你想要测试它。


ic_if_check_box_outline_326561.xml

<vector android:height="24dp" android:viewportHeight="18"
    android:viewportWidth="18" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
    <path android:fillColor="#000000" android:fillType="evenOdd"
        android:pathData="M4.9,7.1L3.5,8.5L8,13L18,3L16.6,1.6L8,10.2L4.9,7.1L4.9,7.1ZM16,16L2,16L2,2L12,2L12,0L2,0C0.9,0 0,0.9 0,2L0,16C0,17.1 0.9,18 2,18L16,18C17.1,18 18,17.1 18,16L18,8L16,8L16,16L16,16Z"
        android:strokeColor="#00000000" android:strokeWidth="1"/>
</vector>

我相信你需要手动设置高度、宽度和视口宽度和高度,使其变小或与Unicode图像相同。 - Umair
但是,我们如何准确地确定高度的值呢? - Cheok Yan Cheng
1个回答

1

嗯,也许这是必要的

drawable.setBounds(0,0, (int) editText.getPaint().getTextSize(),(int) editText.getPaint().getTextSize());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接