3

Stringfrom aの単語TextViewが大きすぎて前の単語と同じ行に収まらない場合、次の行にスキップします。これは非常に便利です。しかし、これは私をジレンマに陥れます。MyStringは、特定の理由から、単語の各文字の間にスペースを入れ、単語の間に 2 つのスペースを入れる必要があります。このため、 はTextView1 行に 1 つのピースを持ち、次の行にもう 1 つのピースを持つ単語を分割します。そのため、次の行にスキップする方法Viewを拡張してオーバーライドするカスタムを作成する必要があるかもしれないと考えています。TextViewしかし、テキストビューのクラスドキュメントを見ると、これを行う方法が見つかりません。ですから、どんな助け、アドバイス、提案も大歓迎です!ありがとう!

4

1 に答える 1

1

TextViewいくつかの変更でオーバーライドできます。

基本的な戦略は、onDraw()メソッドをオーバーライドしてテキストをカスタム ペイントすることです。また、オーバーライドする必要がありますonMeasure()

その中で、文字列内onDraw()のカスタム単語を前処理し、必要に応じて改行文字 ( \n) を挿入します。

テキスト内の単語をループし、measureText(String)を現在の幅と比較TextViewして、改行を挿入する場所を決定します。「パディング」を考慮することを忘れないでください。

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    // TODO Auto-generated method stub
    super.onMeasure(getSuggestedMinimumWidth(), getSuggestedMinimumHeight());
}

@Override
protected void onDraw(Canvas canvas) {
    // preprocess your text
    canvas.drawText(...);
}
于 2013-04-12T22:50:45.307 に答える