2014-04-23 37 views
0

我在我的android應用程序中使用了本地化,並且使用了一些翻譯,文本不適合TextView,沒有我指定它,它添加了三個點到它的結尾。我知道這是因爲文本不適合,但我沒有指定它來做到這一點。我試圖縮放文本以適合它,但它不起作用,有人可以告訴我爲什麼,它會在結尾添加三個點,而不是縮放它以適合。我的代碼完美適用於所有其他不適合但包含兩種語言的文本。Android爲什麼我在TextView的文本末尾添加了3個點

我可以上傳代碼,但對我的其他本地化來說工作正常,我只想知道爲什麼它會在最後添加三個點?由於

編輯:

它是頭一個自定義佈局。

XML:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/title_bar" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:background="@drawable/title_gradient" 
android:orientation="vertical" 
android:tag="title" > 

<TextView 
    android:id="@+id/title_text" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:singleLine="true" 
    android:ellipsize="none" 
    android:background="@color/solid_red" 
    android:gravity="center" 
    android:paddingBottom="3dp" 
    android:text="@string/Hearing_Test" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:textColor="@color/solid_white" 
    android:textStyle="bold" /> 

<ImageButton 
    android:id="@+id/info_button" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_centerVertical="true" 
    android:background="#0000" 
    android:padding="10dp" 
    android:onClick="infoView" 
    android:src="@drawable/info" > 
</ImageButton> 

風格:

<style name="MyCustomTheme" parent="Theme.Sherlock"> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
    <item name="android:actionBarStyle" tools:targetApi="11">@style/MyActionBar</item> 
    <item name="android:textCursorDrawable">@null</item> 
</style> 

<style name="MyActionBar" parent="@style/Widget.Sherlock.ActionBar"> 
    <item name="android:background" tools:targetApi="11">@drawable/title_gradient</item> 
    <item name="background">@drawable/title_gradient</item> 
    <item name="android:homeAsUpIndicator" tools:targetApi="11">@null</item> 
    <item name="homeAsUpIndicator">@null</item> 
    <item name="android:gravity">center</item> 
</style> 

Java類以縮放文本:

public void setTitleTextSize(final int textId, final Boolean displayInfoButton){ 
    infoButton = ((Activity) context).findViewById(R.id.info_button); 
    titleText = (TextView) ((Activity) context).findViewById(R.id.title_text); 

    if(!displayInfoButton){ 
     infoButton.setVisibility(View.GONE); 
    } 

    ViewTreeObserver customTitleScale = titleText.getViewTreeObserver(); 

    customTitleScale.addOnPreDrawListener(new OnPreDrawListener() { 

     @Override 
     public boolean onPreDraw() { 
      final int infoWidth = infoButton.getMeasuredWidth(); 
      if(infoWidth !=0 || !displayInfoButton){ 
       ((Activity) context).runOnUiThread(new Runnable(){ 

        @Override 
        public void run() { 

         if(Build.VERSION.SDK_INT >= 11.0){ 
          TypedValue tv = new TypedValue(); 
          ((Activity) context).getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true); 
          actionBarWidth = ((Activity) context).getResources().getDimensionPixelSize(tv.resourceId); 
         } 

         DisplayMetrics metrics = new DisplayMetrics(); 
         Display Screen = ((Activity) context).getWindowManager().getDefaultDisplay(); 
         Screen.getMetrics(metrics); 
         int screenWidth = metrics.widthPixels; 

         if(displayInfoButton){ 
          titleWidth = screenWidth - infoWidth - actionBarWidth; 
         } else { 
          titleWidth = screenWidth - actionBarWidth; 
         } 

         titleText.setText(textId); 
         String text = ((Activity) context).getResources().getString(textId); 
         titleText.setMaxWidth(titleWidth); 
         Log.d("TextView Width", "Width: " + titleWidth); 

         TextPaint paint = titleText.getPaint(); 
         Rect rect = new Rect(); 
         int textLength = text.length(); 
         paint.getTextBounds(text, 0, textLength, rect); 
         float width = rect.left + rect.right; 
         Log.d("Text length pixels", "Pixels " + width); 


         if(rect.width() > titleWidth){ 

          float scale = (float) titleWidth/(float) rect.width(); 
          float textSize = titleText.getTextSize();  
          float scaleSize = (float) (textSize * (scale*0.8));  
          titleText.setTextSize(TypedValue.COMPLEX_UNIT_PX, scaleSize); 

         } 
        } 
       }); 
       infoButton.getViewTreeObserver().removeOnPreDrawListener(this); 
      } 
      return false; 
     } 
    }); 
} 

在Java類的if(rect.width() > titleWidth)允許縮放比例g發生,除了兩種語言之外,它在任何地方都可以工作,它說rect width比titleWidth小,當它明顯不是!

Screetshot:

問題是有空間TextView的的紅色,我不希望,不知道如何刪除左側。

Screenshoot of Header

+0

setHorizo​​ntallyScrolling方法展示你layout.xml用的TextView –

+0

這些是你的菜單。 – njzk2

+0

我不這是我的菜單,如果你看看java代碼,我把它考慮在內 – Paddy1990

回答

0

他不會縮放以適合。如果你想這樣做,你必須手動完成。您可以更改ellipsize屬性以定義是否要查看...或不。

+0

您是否告訴我一個示例?現在我看到這是一個類,只是爲了調整textView中的文本大小,但它很大,我不認爲我需要太多的代碼才能在textview中縮放文本。我已經做到這一點的方式適用於所有其他本地化欄中的兩種語言,實際上整個應用程序中有兩行不能正常工作 – Paddy1990

+0

我還有一個問題,爲什麼我的textView不能到達左側我的屏幕,沒有填充或邊距,但即使在使用'android:layout_alignParentLeft =「true」'時它也不會對齊到左邊,爲什麼? – Paddy1990

+0

使用ellipsize的例子就像:'android:ellipsize:start' –

相關問題