Android 让用户更改字体大小
在my dimens.xml中,我有: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
<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>