2016-12-30 30 views
-1

私はカンナダ(インドの言語)の文が表示されるシンプルな信心深いアプリを開発しています。私は書体の使用と内容の表示に成功しています。テキストの上部/下部にSpannable画像付きのAndroidテキスト

私はいくつかの場所で、以下に示すように、単語の上/下に線がある単語を持っています。私はスパナブルな画像で試しましたが、まだそれを正しく達成することはできません。

これは私が参照しているコードのサンプルです。ここでは、小さなアイコンを使用して文字列の間に表示します。

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

ImageSpanTextLayoutスパン自体は、すべてのレンダリングを行うことになることを期待しているようあなたがスパニングされているすべての文字は、レンダリングされ得ることはありませんので、ReplacementSpanを拡張します。

あなた自身のReplacementSpanサブクラスを実装することをお勧めします。あなたのグラフィックスは1文字に関連付けられているように見えるので、1文字をラップします。 getSizeオーバーライドで

、テキストの幅を測定し、その値を返すためにpaint.getTextBounds()を使用し、その後、textへのインデックスにstartendを使用して、スパニングされている文字を得るでしょう。幅の計算が、スパンの幅がテキストのデフォルト間隔に影響を与えないように機能するようにしたいとします。

このメソッドが行う必要があるもう一つのことは、線を描画するためのスペースを与えるために、ascentとdescentを増やしてFontMetricsを変更することです。

drawオーバーライドでは、paintを使用して、スパン内でレンダリングされていないテキストをレンダリングします。ペイントとフォントのメトリックは、テキストのレンダーが周囲のテキストのように見えるように、すでに適切な値を持っているはずです。もちろん、必要なライングラフィックもレンダリングします。

いくつかのサンプルコードについては、my answer to a similar questionをご覧ください。これは私が議論したすべての部分を持っています。

このコードを書くには、実際のカンダダ語のテキストの始まりと、行の位置と、どこに行くのかを示すコードを提供する必要があります。カンナダのテキストがLTRかRTLかどうかはわかりません。スパンサブクラスのコード化方法に影響する可能性があります。テキストはあなたが投稿したイメージに対応することが望ましいので、それが動作しているときにどのように見えるかを見ることができます。

関連する問題