让用户改变字体大小

5
在我的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. 大号 +4sp

因此,例如,如果用户选择“大”,我希望字体大小为:

<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个回答

1

不必在每个活动中的每个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;
        }
    }
}

如果您正在使用多个视图并希望控制每个视图的文本大小,我建议使用主题,然后根据您的字体大小更改您的主题。首先在Activity的onCreate()中调用setTheme()即可。
您的主题文件应该像这样。
<style name="NormalSizeTheme" parent="@style/MyTheme">
    <item name="android:textSize">0sp</item>
</style>

我想采用另一种方法,因为我的文本大小被许多不同的控件使用,我只是想告诉应用程序,在启动时使用另一个文件尺寸或类似的东西。 - helloimyourmind
通过您的编辑,我无法使用4种不同的字体大小。您正在设置android:textSize,而我需要设置我在android:textSize中使用的4个属性。 - helloimyourmind
你将拥有多个主题文件,它们的外观都将相同,但取决于你使用的字体大小而更改值。然后通过调用setTheme在它们之间进行切换。 - Chris Stillwell
也许你不理解我的情况: 有一个包含4个textSize的xml dimens文件,还有3个fragment xml布局文件,其中的视图有时使用textSizeSmall,有时使用正常大小等等。 因此,我无法设置“android:textSize”,因为在同一个片段中,我有视图使用了这4种尺寸。 - helloimyourmind

0

您不需要使用 dimens.xml。相反,使用 setTextSize

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

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

1
我想采用另一种方法,因为我的文本大小被许多不同的控件使用,我只想告诉应用程序,在开始时使用另一个文件尺寸或类似的东西。 - helloimyourmind

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接