2010-12-04 58 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上剪下幾個像素。帶有wrap_contents的斜體TextView似乎將文本夾在右邊

對我來說,它看起來像一個錯誤,但我只是一個Android初學者。 我試圖向左右添加邊距,但它仍然保持裁剪狀態。 最後,我對它的攻擊是在文本的兩側添加一個空格。 任何其他解決方案?

+0

你可以發佈你所看到的圖像? – user432209 2010-12-04 14:12:17

+0

http://img576.imageshack.us/img576/2865/textclip.png見最右邊的'o' – Grego 2010-12-06 08:32:07

+0

你提到了margin,你是不是填充? – 2010-12-06 13:32:15

回答

17

android:layout_width="wrap_content",給你一個包裝內容呈現的矩形。 所有對正常文本(非斜體)都適用。

一旦啓用italic文本,該文本包裹將嘗試融入矩形,因此最右邊的字符將除非其未切能(如.)1等)

被切斷作爲建議

解決方案是在文本(或更好的東西?)結束

PS的空間:這適用於android:gravity="right"也因爲文本將被推到最右邊。如果我們有italic文字,我們會面臨同樣的問題。

11

我在我的strings.xml中添加了" \"以結束所有字符串。 \是轉義字符,所以這樣我可以過來的問題,但這個解決方案是討厭的。希望這可以幫助。

+1

這是唯一可靠工作的解決方法。如果使用資源字符串,尾部空格將被刪除(爲什麼它會這樣做?),所以這樣做沒有效果,但斜槓會處理這個問題。 – 2011-08-03 13:10:33

+0

我不認爲這是XML的轉義字符,至少我沒有看到它在這裏:http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references 但是,這絕對是我的工作!我想知道爲什麼。 – nmr 2011-08-29 21:20:38

0

在TextView的右側添加一個3dp填充。我嘗試了1dp和2dp,但3dp似乎完全實現了這個訣竅。

android:paddingRight="3dp"

+8

填充似乎不會影響文本剪輯矩形,至少不是2.3。 – 2011-08-03 13:11:25

1

這適用於固定寬度的TextViews也,不只是 「WRAP_CONTENT」。我不確定這個問題是否與某些評論者所指的版本相關。我在所有Honeycomb版本上看到了這個問題。從我看到的問題不會因設置頁邊距,填充,使用固定寬度或真斜體自定義字體而消失。

5

只需在文本的末尾添加額外的空格。在XML中,您必須將\u0020添加到結尾,否則默認情況下,XML在開始/結束時忽略空白。

1

看着源代碼,我發現設置陰影擴展了剪輯矩形。

一個訣竅就是在角色之外設置一個看不見的影子。

例如:

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

我認爲該解決方案更好,因爲它不會延長TextView增加一個額外的字符(這是更加明顯,一背景)時可能發生的寬度。

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 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)