Android – カスタム描画可能な背景をClickSpanに設定する

カスタムのドローアブル(リソースから)を、TextViewのスパン、特にClickSpanに設定する方法はありますか?

Googleは、スパンのupdateDrawState()をオーバーライドすることによって、ハイライトを無効にしたり、色を変更するなど、多くの回答を返していますが、バックグラウンドにdrawableを設定する方法はありません。

私は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(...

これは動作しません。スパンを見えないようにするだけです。どんな明るいアイデアですか?

ベストアンサー

DrawableのBoundsをgetDrawable()で返す前に設定する必要があります。

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

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です