我曾经使用Unicode在TextView
中显示一些图像符号。
但是,不久以后,我意识到Unicode图像符号在所有设备上看起来都不一样。
然后我决定使用ImageSpan
。
首先,我创建一个Vector图像,而在图像边框周围没有填充。
然后,我应用以下代码
@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);
}
这是我的结果。
我希望我的ImageSpan
版本的高度与Unicode版本的高度相同。
但是,好像
float height = textView.getPaint().getFontMetrics().descent - textView.getPaint().getFontMetrics().ascent;
真的没有帮助。
关于如何实现的任何建议?我发布了SVG图片,以防万一您想对其进行测试。
<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>
答案 0 :(得分:0)
好吧,也许这是必要的
drawable.setBounds(0,0, (int) editText.getPaint().getTextSize(),(int) editText.getPaint().getTextSize());