情報のために、テキストを境界内に収める方法を説明するすべてのリソースを調べました
- 境界内に収まるようにTextViewテキストを自動スケーリング
- TextViewに合わせてテキストを拡大/縮小する方法は?
- テキストビューに合わせてテキストのフォントサイズを調整する方法
- ジンジャーブレッドとジェリービーンズの Android フォント サイズの違いの問題
TextView
しかし、私の主な問題は、テキストの境界内に収まるようにフォントのサイズを変更Custom Font
したくないということassets
ですslider
。Jelly Bean
問題はないようですが、デバイスのテキストは画像に示すように
Jelly Bean
の境界に適合しませんTextView
さらに、回答に記載されている目的のソリューションはどちらも役に立ちません。何らかの方法で、ソリューションの一部は、境界内に収まるようにサイズをstackoverflow
下げるだけです。font
フォントサイズを小さくしたくない代わりに、次のことをしたい
- 画面の幅に収まるテキストの長さを計算する
- 次に、その特定の長さで文字列に改行を追加します
- テキストの長さが長くなるので、StringBuffer と StringBuilder を使用することを恐れています。
out of memory exception
- そのため
TextView
、表示可能な長さに達したときにニュース行を挿入する係数が自動的に計算されます。
これまでのところ、画面の幅に収まる単語の最小量を見つけるのに役立つ係数を計算することで、テキストを分解するHello
ことができHel
ます.によって続けられlo
ます。
public class AutoResizeTextView extends TextView {
private boolean forFirstTime = true;
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if (forFirstTime)
monitorChanges();
}
private void monitorChanges() {
final int widthLimit = getMeasuredWidth() - getCompoundPaddingLeft()
- getCompoundPaddingRight();
if (widthLimit <= 0) {
return;
}
final String mainText = getText().toString();
final float actualTextWidth = getPaint().measureText(mainText);
forFirstTime = false;
setText("");
String[] overallText = inputText.split("\\n");
for(int j=0;j<overallText.length;j++){
String mainText =overallText[j];
int length = mainText.length();
int lineNumber = Math.round(getPaint().measureText(mainText)/ widthLimit);
int wordLimit = (int) Math.round(length / (lineNumber * 1.3));
//wordLimit+=2;
if (wordLimit < length) {
int count = Math.round(length / wordLimit);
int startIndex = -1, endIndex = -1;
for (int i = 0; i < count; i++) {
startIndex = wordLimit * i;
endIndex = wordLimit * (i + 1);
append(mainText.substring(startIndex, endIndex) + "\n");
}
append(mainText.toString().substring(endIndex, length)+"\n");
}
}
}
EditText
ここで、デフォルトのAndroid on wrap_content
paramsで示されるように、テキスト全体が次の行に移動するように、単語が壊れないようにしたいと考えています。さらに、 を計算するための式は正確ではありません。正確な長さを知りwordLimit
たいだけです。string
widthLimit
TextView/EditText
私もそれに取り組んでおり、何かあれば必ず投稿します。