我想在 Android 中动态应用图像跨度的背景颜色。
你能提出任何想法吗?
你不能同时使用BackgroundColorSpan
和ImageSpan
。这个想法是从带有背景和图像层的LayerDrawable创建一个 ImageSpan 。请看下面的代码:
Kotlin:
val span: Spannable = SpannableString("This is ic launcher with background")
val myImage: Drawable = resources.getDrawable(R.drawable.ic_launcher_foreground)
val background = ShapeDrawable()
background.paint.color = Color.RED
val layerDrawable = LayerDrawable(arrayOf(background, myImage))
layerDrawable.setBounds(0, 0, 64, 64)
val image = ImageSpan(layerDrawable, ImageSpan.ALIGN_BASELINE)
span.setSpan(image, 8, 9, Spannable.SPAN_INCLUSIVE_EXCLUSIVE)
textView.setText(span)
爪哇:
Spannable span = new SpannableString("This is ic launcher with background");
Drawable myImage = context.getResources().getDrawable(R.drawable.ic_launcher_foreground);
ShapeDrawable background = new ShapeDrawable();
background.getPaint().setColor(Color.RED);
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[]{background, myImage});
layerDrawable.setBounds(0, 0, 64, 64);
ImageSpan image = new ImageSpan(layerDrawable, ImageSpan.ALIGN_BASELINE);
span.setSpan(image, 8, 9, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
textView.setText(span);
结果将是这样的:
BackgroundColorSpan
withImageSpan
用于相同的位置接受的答案可以完成工作。此外,如果您想LayerDrawable
从 XML 创建,这里是一个示例。
[src/main/res/drawable/layer_drawable.xml]
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<solid android:color="@color/your_color" />
</shape>
</item>
<item android:drawable="@drawable/ic_your_image" />
</layer-list>
[In your Fragment]
ResourcesCompat.getDrawable(resources, R.drawable.layer_drawable, null)?.let { layerDrawable ->
val size = resources.getDimension(R.dimen.layer_drawable_size).toInt()
layerDrawable.setBounds(0, 0, size, size) // Not sure how to do this in XML.
val imageSpan = ImageSpan(layerDrawable)
...
}