Android - 设置自定义的可点击文本背景为Drawable

7
有没有办法将自定义的可绘制资源(从资源中获取)设置到TextView的span上,特别是ClickSpan?
Google返回了许多关于通过覆盖span的updateDrawState()方法来禁用高亮或更改颜色等的答案,但我没有看到如何将绘制的内容设置为背景。
我在DynamicDrawableSpan中看到了可能性,但我无法使其与ClickableSpan一起工作。这是我的代码:
public class MyDynamicDrawableSpan extends DynamicDrawableSpan 
{
    private Context c;

public MyDynamicDrawableSpan(Context context) {
    super();
    c = context;
}

@Override
public Drawable getDrawable() {
    Resources res = c.getResources();
    Drawable d = res.getDrawable(R.drawable.span_background);
    return d;
}

这是我如何使用它:

}

SpannableStringBuilder ssb = new SpannableStringBuilder(text);
MyDynamicDrawableSpan ddSpan = new MyDynamicDrawableSpan(getApplicationContext());
...
ssb.setSpan(ddSpan, start, end, 0);
ssb.setSpan(new ClickableSpan(...

这并不起作用,它只是帮助使span不可见。有什么好的想法吗?

你的span_background.xml文件是什么样子的?我尝试通过创建一个形状可绘制对象来实现类似的效果,但是span显示为空白。这是因为形状可绘制对象必须设置在像按钮这样的视图的背景上吗?https://dev59.com/w1nUa4cB1Zd3GeqPYC57 - Etienne Lawlor
我正在这里做类似的事情 https://dev59.com/R2gv5IYBdhLWcg3wJNhF - Etienne Lawlor
这里我已经解释得很清楚了。你可以查看我的答案 - Krishna Shrestha
1个回答

0

在返回getDrawable()之前,您需要设置Drawable的边界。

d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());

我尝试过这个方法,但对于XML定义的形状可绘制对象仍然无效。该跨度仅是不可见的。 - Etienne Lawlor
可点击的span必须设置为这样: https://dev59.com/P2oy5IYBdhLWcg3wScTb - Etienne Lawlor

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