2011-11-13 110 views
7

有沒有一種方法可以將自定義可繪製(從資源)設置爲TextView的跨度,特別是ClickSpan?Android - 將自定義可繪製背景設置爲ClickSpan

谷歌返回通過覆蓋跨度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(... 

這是行不通的。它只有幫助使跨度隱形。任何明智的想法?

+0

你的span_background.xml文件是什麼樣的?我通過創建可繪製的形狀來嘗試類似的東西,但跨度顯示爲不可見。這是因爲一個可繪製的形狀必須設置在一個視圖的背景像一個按鈕? http://stackoverflow.com/questions/6674657/how-change-button-shape-using-xml-or-using-java-code – toobsco42

+0

我正在做類似的東西在這裏http://stackoverflow.com/questions/10812316/ contact-bubble-edittext – toobsco42

+0

這裏我已經解釋得很好。你可以看到我的[答案](http://krishnalalstha.wordpress.com/2012/06/07/making-gosmsproevernote-like-edittext/) –

回答

0

您需要在getDrawable()中返回之前設置Drawable的邊界。

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

我試過這個,但它仍然不適用於xml定義的形狀drawable 。跨度只是看不見的。 – toobsco42

+0

的clickablespan必須設置這樣的: http://stackoverflow.com/questions/8641343/android-clickablespan-not-calling-onclick – toobsco42

相關問題