2016-12-30 107 views
-1

我正在開發一個簡單的虔誠應用程序,它具有要顯示的卡納達語(印度語)句子。我成功地使用字體和顯示內容。帶有文本頂部/底部的Spannable圖像的Android文本

在少數幾個地方我有一個單詞,在單詞的頂部/底部有一行,如下所示。我嘗試了一個spannable圖像,但我仍然無法正確實現。

這是我所指的代碼示例。這裏我使用一個小圖標來顯示它在字符串之間。

Spannable span1 = new SpannableString("The imageplace"); 
Drawable android = TestImageActivity.this.getResources().getDrawable(R.drawable.end); 
android.setBounds(5, 0, 20, 5); 
ImageSpan image = new ImageSpan(android, ImageSpan.ALIGN_BASELINE); 
span1.setSpan(image, 3, 4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); 
tvTextImage3.setText(span1); 

small line above and below text

+0

我沒有得到任何解決方案如何實現,如果任何人有任何想法,讓他們幫助 – keerthi

+0

我需要一個爲什麼這個問題關閉的原因。 – keerthi

+0

添加代碼是一個很大的幫助。你還可以進一步解釋問題是什麼?看起來你正在試圖讓一些文字像圖像一樣出現。您包含的代碼不完整,無法生成該文本,也沒有顯示代碼的結果與您希望實現的結果之間的差異。 –

回答

0

ImageSpan延伸ReplacementSpan所以你跨越任何字符將不會呈現,因爲TextLayout期待的跨度本身會做所有的渲染。

我會推薦的是實現你自己的ReplacementSpan子類。由於看起來您的圖形與一個字符相關聯,因此您將包裝單個字符。

getSize覆蓋,您將使用startend索引到text,並得到你所跨越的字符(一個或多個),然後使用paint.getTextBounds()要測量的文本的寬度和返回值。您希望寬度計算以跨度寬度不影響文本的默認間距的方式工作。

此方法可能需要做的另一件事是更改FontMetrics通過增加上升和下降爲了給你一些空間來畫線。

draw覆蓋中,您可以使用paint來呈現未在跨度範圍內呈現的文本。油漆和字體指標應該已經具有適當的值,以便您的文本渲染看起來像周圍的文本。當然,你也會渲染你想要的線條圖形。請參考my answer to a similar question。這有我剛剛討論過的所有內容。

如果您希望我爲此編寫一些代碼,您需要提供一些代碼,這些代碼爲我提供了一些實際的Kannada文本的起點以及行和行的位置。我甚至不知道卡納達文本是LTR還是RTL;這可能會影響span子類的編碼方式。文本最好對應於您發佈的圖片,以便我可以看到它在工作時的外觀。

相關問題