2010-12-04 13 views
43
<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エミュレータやNexus Oneの上、右端の文字から数ピクセルをクリップするようだ右端にテキストをクリップするようです。斜体のTextViewは

私にはバグのようですが、私はAndroidの初心者です。 左と右に余白を追加しようとしましたが、それでもクリッピングが続いていました。 最後に、私の周りのハックは、テキストの両側に単一のスペースを追加することでした。 他の解決方法はありますか?

+0

にHAIRスペースを追加することができますか? – user432209

+0

http://img576.imageshack.us/img576/2865/textclip.png右端の「o」を参照 – Grego

+0

余白に言及しましたか、パディングを意味しましたか? –

答えて

17

android:layout_width="wrap_content"は、ラップされたコンテンツレンダリングの矩形を提供します。 通常のテキスト(イタリック体ではない)ではすべて正常に動作します。

あなたがitalicテキスト有効にした後、包まれたテキストは、したがって右端の文字は、そのアンカットできる(例えば.)1など)

ない限り遮断される長方形に収まるとしようとします

ソリューション提案として、(??か何かより良い)テキストの末尾にスペースを持つようにされて

PS:テキストは、右端にプッシュされますので、これはあまりにもandroid:gravity="right"に適用されます。テキストがitalicの場合、同じ問題が発生します。

11

私はstrings.xml内のすべての文字列の末尾に" \"を追加しました。 \はエスケープ文字なので、この方法で問題を解決することができますが、この解決策は厄介です。お役に立てれば。

+1

これは確実に動作する唯一の回避策です。リソース文字列を使用すると、末尾のスペースが削除されます(なぜそれが行われますか?)ので、何の効果もありませんが、スラッシュはそれを処理します。 –

+0

私はそれがXMLのエスケープ文字ではないと思っています。少なくとも私はここでそれを見ませんでした:http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references これは間違いなく私のために働いた!なぜ私は不思議です。 – nmr

0

TextViewの右側に3Dパッディングを追加します。私は1dpと2dpで試しましたが、3dpはそのトリックを完全にやっているようでした。

android:paddingRight="3dp"

+8

パディングは、少なくとも2.3ではなく、テキストクリップrectに影響するようです。 –

+0

アプリケーションのタイトル(私の場合はActionBarSherlock)と同じですが、タイトルTextViewを簡単にカスタマイズすることはできません。しかし、試してくれてありがとう。 –

+0

それは私のために働いた。 –

1

これだけではなく、 "wrap_content"、また、固定幅TextViewsに適用されます。いくつかのコメントが述べられているように、問題がバージョン固有のものかどうかはわかりません。ハニカムのすべてのバージョンでこの問題が表示されます。私が見たところでは、余白、パディング、固定幅、または真斜めのカスタム書体を使用することで、問題は解決しません。

17

Unicode no-break space character(\ u00A0)を使用することもできます。

+0

これはうまくいくようです。 – alaeri

+0

私のためにも動作します。まだハックですが、動作するハック! –

+0

今のところ唯一の解決策 – Bronx

5

テキストの末尾に余分なスペースを追加するだけです。 XMLでは、\u0020を末尾に追加する必要があります。そうしないと、XMLはデフォルトで先頭または末尾の空白を無視します。

+0

別の解決策/ハック/回避策。ありがとう。 –

+0

setTextSkewXを使用して同じ問題が発生しました(これは、テキストをイタリック体にする別の方法です)。この問題も修正されました。 – thecoolmacdude

1

ソースを見ると、シャドウを設定するとクリップの長方形が広がることがわかりました。

トリックは、文字のすぐ上に目に見えない影を設定することです。例えば

android:shadowRadius="2" 
android:shadowDx="2" 
android:shadowColor="#00000000" 

私は、このソリューションは、それが(バックグラウンドでより明白である)余分な文字を追加するときに発生する可能性がありTextViewの幅を拡張しませんよう、より良いと思います。

+0

私のために働かなかった。 「ディメンションタイプは許可されていません」 – thecoolmacdude

+0

編集:ディップを削除します –

3

他の溶液が見つかった(wrap_contentを使用して4.1.2および4.3で試験)。あなたがTextViewEditTextクラスを拡張する場合は、この方法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()); 
} 
0

は、これは私のソリューションです:フォーマットの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)); 

私のために働いてください。これらの助けを願ってください。

1

あなたは、あなたが見ているものの画像を投稿することができ、あなたの文字列

<string name="hair_space">&#x200A;</string> 

String hairSpace = getContext().getString(R.string.hair_space); 
textView.setText(hairSpace + originalString + hairSpace) 
+1

これはうまくいきました、ありがとう!私はGoogleが強制するこれらのハッキングを嫌う! –

関連する問題