<TextView Android:id="@+id/prodLbl"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
Android:textColor="#FFFFFF"
Android:textSize="30dip"
Android:textStyle="italic"
Android:text="Magnifico"
/>
少なくとも480x800エミュレーターまたはNexusOneでは、右端の文字から数ピクセルをクリップしているようです。
私にはそれはバグのように見えますが、私は単なるAndroid=初心者です。左と右にマージンを追加しようとしましたが、それでもクリッピングが続いています。結局私のハックテキストの両側に単一のスペースを追加することでした。他の解決策はありますか?
nicodeの改行なしスペース文字 (\ u00A0)を使用することもできます。
Android:layout_width="wrap_content"
は、ラップされたコンテンツのレンダリング用の長方形を提供します。すべてが通常のテキスト(イタリック以外)でうまく機能します。
italic
テキストを有効にすると、折り返されたテキストは四角形に収まるように試行されるため、カットできないもの(.
、)
、1
など)を除いて、右端の文字が切り取られます。
提案されている解決策は、テキストの最後にスペースを入れることです(またはもっと良い??)
PS:テキストは右端にプッシュされるため、これはAndroid:gravity="right"
にも適用されます。 italic
テキストがある場合、同じ問題に直面します。
追加した " \"
strings.xml内のすべての文字列の終わり。 \
はエスケープ文字なので、この方法で問題を解決できますが、この解決策は厄介です。お役に立てれば。
テキストの最後に余分なスペースを追加するだけです。 XMLでは、末尾に\u0020
を追加する必要があります。そうしないと、XMLはデフォルトで先頭/末尾の空白を無視します。
別の解決策を見つけました(wrap_content
を使用しながら4.1.2および4.3でテスト済み)。 TextView
またはEditText
クラスを拡張する場合は、次のようにしてonMeasure
メソッドをオーバーライドできます。
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int measuredWidth = getMeasuredWidth();
final float tenPercentOfMeasuredWidth = measuredWidth * 0.1f;
final int newWidth = measuredWidth + (int) tenPercentOfMeasuredWidth;
setMeasuredDimension(newWidth, getMeasuredHeight());
}
文字列にヘアスペースを追加できます
<string name="hair_space"> </string>
String hairSpace = getContext().getString(R.string.hair_space);
textView.setText(hairSpace + originalString + hairSpace)
これは、「wrap_content」だけでなく、固定幅のTextViewにも当てはまります。一部のコメンターが言及したように、問題がバージョン固有であるかどうかはわかりません。すべてのHoneycombバージョンで問題が発生します。私が見てきたことから、マージンの設定、パディング、固定幅の使用、またはイタリックのカスタム書体によって問題が解消されることはありません。
適切でクリーンな解決策:
TextStyle = 'italic'を設定する代わりに、イタリックのカスタムフォントを使用します。例:
<Android.support.v7.widget.AppCompatTextView
Android:text="yolO"
app:fontFamily="@font/roboto_italic"/>
私は通常のTextViewでそれを試していませんが、私の観察から、問題はtextStyle = 'italic'にあります。
ハックなしで動作します!
これがtextStyle属性のせいの証拠です:
カスタムfontFamilyを作成し、通常、太字、斜体の書体を定義しました
res/font/app_font_family.xml
<font-family xmlns:app="http://schemas.Android.com/apk/res-auto">
<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/roboto_regular"/>
<font app:fontStyle="italic" app:fontWeight="400" app:font="@font/roboto_italic" />
<font app:fontStyle="normal" app:fontWeight="700" app:font="@font/roboto_medium"/>
</font-family>
このfontFamilyを使用してtextStyle = 'italic'を適用すると、右端の文字がまだクリップされます。
<Android.support.v7.widget.AppCompatTextView
Android:text="yolO"
app:fontFamily="@font/app_font_family"
Android:textStyle='italic' />
これは、サポートライブラリ28.0.0およびAndroid Studio3.2を備えたApi23上にあります
ソースを見ると、シャドウを設定するとクリップの長方形が拡張されることがわかりました。
秘訣は、キャラクターのすぐ先に見えない影を設定することです。
例えば:
Android:shadowRadius="2"
Android:shadowDx="2"
Android:shadowColor="#00000000"
余分な文字を追加するときに発生するTextView
の幅を拡張しないため、この解決策の方が良いと思います(背景を使用するとより明確になります)。
これが私の解決策です:テキストビューのフォーマットと測定。その後、1ピクセルでテキストビューの幅を設定し、測定された幅に追加します。
TextView textView = new TextView(this);
textView.setText("Text blah blah");
textView.setTypeface(typeface, Typeface.BOLD_ITALIC)
textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
textView.setLayoutParams(new LayoutParams(textView.getMeasuredWidth() + 1,
LayoutParams.WRAP_CONTENT));
私のために働いています。これらの助けを願っています。
私も同じ問題を抱えており、HTMLを介してノーブレークスペースエンティティを使用しました。
textView.setText("Magnifico" + Html.fromHtml(" ");
TextViewの右側に3 dpのパディングを追加します。 1dpと2dpで試してみましたが、3dpで十分にうまくいったようです。
Android:paddingRight="3dp"
プログラムで斜体を適用すると、コンテンツの折り返しが正しく行われるように思われます。したがって、TextViewの書体を手動で設定します。 kotlinで:
textView.typeface = Typeface.create(Typeface.DEFAULT, Typeface.ITALIC)