Android为什么我在TextView的文本末尾得到3个点

时间:2014-04-23 18:12:24

标签: java android

我在我的Android应用程序中使用本地化,并且使用一些翻译,文本不适合TextView,如果没有我指定它,它会在它的末尾添加三个点。我知道这样做是因为文字不合适,但我没有指定它来做这件事。我试图缩放文本以适应但它不起作用,有人可以告诉我为什么,它会将三个点添加到最后而不是缩放它以适应。我的代码适用于所有其他不适合两种语言的文本。

我可以上传代码,但它在本地化的其余部分工作正常,我只是想知道为什么它会在最后添加三个点?感谢

修改

它是标题的自定义布局。

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)允许缩放发生,它可以在任何地方工作,除了两种语言,它表示矩形宽度小于titleWidth,当它公然不是!

Screetshot:

问题是textView左侧有空格,我不想要,也不知道如何删除。

Screenshoot of Header

2 个答案:

答案 0 :(得分:0)

他不会缩放以适应。如果要执行此操作,则必须手动执行此操作。您可以更改ellipsize属性以定义是否要查看...或

答案 1 :(得分:0)

在您的xml文件中尝试使用该TextView

机器人:scrollHorizo​​ntally = “真”

或以编程方式使用

setHorizo​​ntallyScrolling方法http://developer.android.com/reference/android/widget/TextView.html#setHorizontallyScrolling(boolean)