Android - 设置文本大小以编程方式切断单词

时间:2017-08-30 09:30:32

标签: android textview

所以我使用一个库来调整文本大小以适应范围:https://github.com/grantland/android-autofittextview。我想要做的是循环文本视图的ArrayList并找到最小的文本大小,然后将该文本大小设置为每个文本视图。 我的Java代码:

//Loop through every textview and get lowest size
        float lowestTextSize = textViews.get(0).getTextSize();
        for (TextView textView : textViews){
            if(lowestTextSize > textView.getTextSize()){
                lowestTextSize = textView.getTextSize();
            }
        }

        lowestTextSize = lowestTextSize / getResources().getDisplayMetrics().scaledDensity;

        //Loop through every textview and set them all to the lowest text size previously found
        for (TextView textView : textViews){
            textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, lowestTextSize);
        }

我的问题是,在为每个textview设置该大小后,textview的大小会发生变化,但不会改变单词本身的大小,所以我会将单词切成两半(异常使我正在使用的单词大小,由AutoFit库调整大小enter image description here

关于如何解决这个问题的任何想法?

我的XML代码:

<LinearLayout
    android:id="@+id/highestSellingProductLayout"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_marginBottom="8dp"
    android:layout_marginEnd="8dp"
    android:layout_marginLeft="8dp"
    android:layout_marginRight="8dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="8dp"
    android:layout_weight="1"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3"
        android:gravity="center"
        android:orientation="horizontal">

        <me.grantland.widget.AutofitTextView
            android:id="@+id/highestSellingProduct"
            autofit:minTextSize="15sp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center"
            android:maxLines="1"
            android:paddingBottom="5dp"
            android:text="NA"
            android:textAlignment="center"
            android:textColor="@color/colorSuccess"
            android:textSize="22sp"
            android:textStyle="bold" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <me.grantland.widget.AutofitTextView
            autofit:minTextSize="15sp"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="bottom"
            android:maxLines="1"
            android:paddingBottom="5dp"
            android:text="Highest Selling"
            android:textAlignment="center"
            android:textSize="15sp" />
    </LinearLayout>

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

我找到了这个问题。要使用AutofitTextView更改java中文本的大小,我必须在每个textview上使用autofitHelper。以下代码对我有用:

 //Loop through every textview and get lowest size
    float lowestTextSize = textViews.get(0).getTextSize();
    for (TextView textView : textViews){
        if(lowestTextSize > textView.getTextSize()){
            lowestTextSize = textView.getTextSize();
        }
    }

    lowestTextSize = lowestTextSize / getResources().getDisplayMetrics().scaledDensity;

    //Loop through every textview and set them all to the lowest text size previously found
    for (TextView textView : textViews){
        textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, lowestTextSize);
        AutofitHelper autofitHelper = AutofitHelper.create(textView);
        autofitHelper.setTextSize(textView.getTextSize());
    }