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

时间:2018-07-04 06:17:25

标签: android

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

但是,不久以后,我意识到Unicode图像符号在所有设备上看起来都不一样。

然后我决定使用ImageSpan

首先,我创建一个Vector图像,而在图像边框周围没有填充。

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>

1 个答案:

答案 0 :(得分:0)

好吧,也许这是必要的

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