让用户更改字体大小

时间:2015-06-24 18:35:23

标签: android fonts font-size android-fonts

在我的dimens.xml中我已经:

<dimen name="text_small">16sp</dimen>
<dimen name="text_normal">18sp</dimen>
<dimen name="text_medium">20sp</dimen>
<dimen name="text_big">22sp</dimen>

现在我想让用户在设置片段中选择字体大小。比方说吧:

  1. 小-2sp
  2. 正常+ 0sp
  3. 中+ 2sp
  4. Big + 4sp
  5. 因此,例如,如果用户选择“Big”,我希望字体大小为:

    <dimen name="text_small">20sp</dimen>
    <dimen name="text_normal">22sp</dimen>
    <dimen name="text_medium">24sp</dimen>
    <dimen name="text_big">26sp</dimen>
    

    有没有办法做类似的事情:

    申请开始:

    if (sizeUser.equals("Big")) {
        text_small=24sp
    .....
    }
    

    等等?

2 个答案:

答案 0 :(得分:1)

我不是必须为每个Activity中的每个TextView调用setTextSize,而是创建一个扩展TextView的自定义类,然后包含用于在setTextSize中设置文本大小的逻辑。

public class MyTextView extends TextView {

    public MyTextView(Context context) {
        super(context);
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setTextSize (int unit, float size){
        switch(USER_SET_SIZE){
            case SMALL:
                setTextSize(TypedValue.COMPLEX_UNIT_SP, -2);
                break;
            case MEDIUM:
                setTextSize(TypedValue.COMPLEX_UNIT_SP, 2);
                break;
            case LARGE:
                setTextSize(TypedValue.COMPLEX_UNIT_SP, 4);
                break;
            case NORMAL:
            default:
                setTextSize(TypedValue.COMPLEX_UNIT_SP, 0);
                break;
        }
    }
}

或者,如果您使用多个视图并希望控制每个视图的文本大小,我建议使用主题,然后根据您的字体大小更改主题。只需先在您的活动setTheme()中致电onCreate()

您的主题文件应如下所示

<style name="NormalSizeTheme" parent="@style/MyTheme">
    <item name="android:textSize">0sp</item>
</style>

答案 1 :(得分:0)

您无需使用dimens.xml。相反,请使用setTextSize

TextView tv = findViewById(R.id.textView);

if ("Big".equals(sizeUser) {
    tv.setTextSize(26);
}