0

こんにちは、みんな、

私には手に負えないように見える問題で頭を悩ませています(おそらく私の無知x)。

書き込み時に文字列がTextViewあり、使用可能なスペースを計算し、必要に応じてフォントサイズを最小サイズセットに縮小してから、行を追加して書き続けます。

問題:

ボタン 2 と 3 の文字列を書き込むと、 の行がTextView正しく入力されていることが表示されます。最初の行が完成し、残りの文字列が 2 行目に表示されます。ES.:

56688+(555556565555566
555555

56688x(555556565555566
555555

ボタン 1 と 4 の文字列を書き込むと、 の行がTextView正しく埋められていないことがわかります。最初の行は '/' または '-' まで埋められ、ほとんど空のままで、文字の後のテキストは 2 行目にあります。ES.:

                56688/
(555556565555566555555

                56688-
(555556565555566555555

意図した動作は、ボタン 2 と 3 の文字列の動作です。

'/' と '-' の文字が存在すると異常な動作をする理由と、この異常を修正する方法がわかりません。

コードを同封します:

ファイル「activity_main.xml」には、以下に報告するカスタム コンポーネントがあります。

<LinearLayout android:id="@+id/mainLayout" 
android:layout_width="fill_parent"         
android:layout_height="wrap_content" 
androidrientation="vertical"  
android:layout_alignParentTop="true">

<com.example.component.NumTextView
 android:id="@+id/textViewInput"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:focusable="true"
 android:gravity="right"
 android:maxHeight="64dp"
 android:minHeight="64dp"
 app:lines="1"
 app:maxLines="3"
 app:mintextsize="16"
 app:maxtextsize="48"
 androidadding="0dp"
 android:scrollbars="vertical"
 android:singleLine="false" android:text="" />

<View android:layout_width="fill_parent" 
 android:layout_height="1dp"  
 android:background="#000000" />

「TextView」から継承するクラス「NumTextView」には、次のコードがあります。

private void refitText(String text, int textWidth)
{
 float trySize = 23;
if( textWidth > 0 )
{
int lineCount = this.getLineCount();
this.setLines(lineCount + 1);
this.setVerticalScrollBarEnabled(true);
this.setMovementMethod(ScrollingMovementMethod.get Instance());
this.setTextSize(trySize);
}
}


@Override
protected void onTextChanged(final CharSequence text, final int start, final int before, final int after)
{
refitText( text.toString(), this.getWidth() );
}

最後に、「MainActivity」には次のコードがあります。

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textInput = (NumTextView) findViewById(R.id.textViewInput);
}

public void onClick1(View v)
{
String stringa ="56688-(555556565555566555555";
textInput.setText(stringa);
}

public void onClick2(View v)
{
String stringa ="56688+(555556565555566555555";
textInput.setText(stringa);
}

public void onClick3(View v)
{
String stringa ="56688x(555556565555566555555";
textInput.setText(stringa);
}

public void onClick4(View v)
{
String stringa ="56688/(555556565555566555555";
textInput.setText(stringa);
}
4

1 に答える 1

0

理由: スラッシュ (/) とハイフン (-) は改行文字であるため、これらのポイントで自然に行を改行しようとします。これがワード ラップの仕組みです。区切り文字を探し、収まる最後の区切り位置に改行文字を挿入します。

修理? 行を測定して各行に収まる文字数を確認できる場合は、ゼロ幅のスペース(U+200B) を挿入して、その場所で強制的に改行できる場合があります。ただし、すべてのフォントがこの文字をサポートしているわけではないため、すべてのデバイスで機能するとは限りません。

zw-space を使用できない場合、または一般的な自動サイズ変更に関心がある場合は、この質問に対するさまざまな回答が役立つ場合があります。

于 2012-11-05T22:06:41.773 に答える