在运行时更改字体大小

时间:2018-11-16 05:46:30

标签: android android-xml android-fonts

我有一个textview,在32sp中的大小为xml

android:textSize="32sp"

我想通过编程将其更改为28sp。所以我用了下面的代码。

txt.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.twenty_eight_sp));

但是上面的代码将28sp添加到32sp。因此,字体变得太大。我不想添加字体大小,我想设置一个新的字体大小。

任何人都可以建议我。

5 个答案:

答案 0 :(得分:2)

您必须将其更改为TypedValue.COMPLEX_UNIT_PX,因为getDimension(id)从资源中返回一个dimen值,并隐式转换为px

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
           getResources().getDimension(R.dimen.result_font));

答案 1 :(得分:2)

您可以在运行时更改字体大小,如下所示:

text.setTextSize(TypedValue.COMPLEX_UNIT_PX, 
       getResources().getDimension(R.dimen.result_font));
  

OR

完整代码,可在运行时更改 TextSize ,以适应任何屏幕尺寸:

 text.setTextSize(TypedValue.COMPLEX_UNIT_PX, DetermineTextSize
            .determineTextSize(text.getTypeface(),
                    setTextHeight);
DetermineTextSize 类调用的

determineTextSize()方法:

  

DetermineTextSize.class

public class DetermineTextSize {

public static int determineTextSize(Typeface font, float allowableHeight) {

    Paint p = new Paint();
    p.setTypeface(font);

    int size = (int) allowableHeight;
    p.setTextSize(size);

    float currentHeight = calculateHeight(p.getFontMetrics());

    while (size != 0 && (currentHeight) > allowableHeight) {
        p.setTextSize(size--);
        currentHeight = calculateHeight(p.getFontMetrics());
    }

    if (size == 0) {
        return (int) allowableHeight;
    }
    return size;
}

private static float calculateHeight(FontMetrics fm) {
    return fm.bottom - fm.top;
}
}

答案 2 :(得分:0)

txt.setTextSize(TypedValue.COMPLEX_UNIT_SP,getResources().getDimension(R.dimen.twenty_eight_sp));

答案 3 :(得分:0)

检查此链接  https://developer.android.com/reference/android/widget/TextView#setTextSize(int,%20float)

根据您的要求考虑这两个功能

enter image description here

答案 4 :(得分:0)

尝试一下

public virtual ICollection<Job> Job { get; set; }