Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 让用户更改字体大小_Android_Fonts_Font Size_Android Fonts - Fatal编程技术网

Android 让用户更改字体大小

Android 让用户更改字体大小,android,fonts,font-size,android-fonts,Android,Fonts,Font Size,Android Fonts,在my 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> 等等?您不需要使用dimens.xml。相反,请使用set

在my 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>

等等?

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

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

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

我不必为每个活动中的每个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;
        }
    }
}
或者,如果您使用多个视图,并且希望控制每个视图的文本大小,我建议您使用主题,然后根据字体大小更改主题。只需首先在活动的
onCreate()
中调用
setTheme()

您的主题文件应该如下所示

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

0sp

Dimens文件用于在不同的屏幕上按比例显示文本。我想使用另一种方法,因为我的文本大小由许多不同的控件使用,我只想对应用程序说,在开始时使用另一个文件尺寸或类似的东西。在您的编辑中,我不能使用4种不同的字体大小,您正在设置android:textSize,而我需要设置我在android:textSize中使用的4个属性。您将有多个主题文件,它们看起来都是这样,但值会根据您使用的字体大小而改变。然后,您可以通过调用setThemeMaybe在它们之间切换,因为您可能不了解我的情况:1个xml dimens文件具有4个textSize,3个片段xml布局文件具有视图,该视图有时使用textSizeSmall,有时使用普通文件,依此类推。所以我不能设置“android:textSize”,因为在同一个片段中,我有使用所有4个大小的视图。我想使用另一种方法,因为我的文本大小被许多不同的控件使用,我只想对应用程序说,在开始时使用另一个文件维度或类似的东西。
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;
        }
    }
}
<style name="NormalSizeTheme" parent="@style/MyTheme">
    <item name="android:textSize">0sp</item>
</style>