Android系统设置大号字体后布局错乱的问题

从android4.0起“系统设置”的“显示”提供设置字体大小的选项。这个设置会影响到所有以sp为单位的字体适配,所以很多app在设置了系统字体后会变得面目全非。那么应该怎么解决这个问题呢?想要解决这个问题,首先我们要找到这个问题的原因。

在Android手机上调整字体的显示大小后,安卓手机中Configuration的fontScale的值会随之更改,正常情况下此值为1.0,修改字体大小后,其对应的值如下所示:

Small:0.85

Normal:1.0

Large:1.15

Extra large:1.3

正是因为此值的变化,所以才导致了字体的放大和缩小。

既然是因为此值的变化导致了字体的变大和缩小,为了解决这个问题,我们就可以在代码中动态的改变此值,将此值改为正常大小即1.0。代码如下:

Resources resource = getResources();

Configuration configuration =resource.getConfiguration();

configuration .fontScale = 1.0f;//设置字体的缩放比例

resource.updateConfiguration(configuration , resource.getDisplayMetrics());


最好将此段代码封装成一个方法放在onResume中,这样可以确保程序启动后,退到后台再修改字体返回到程序时,依然可以显示我们指定的字体缩放大小。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
该功能的实现,可以按照以下步骤操作: 1. 在布局文件中添加一个按钮和一个文本框,代码如下: ``` <Button android:id="@+id/btnSetFont" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="设置字体大小"/> <TextView android:id="@+id/tvText" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="这是一段示例文本"/> ``` 2. 在Java代码中获取按钮和文本框控件,并设置按钮的点击事件,代码如下: ``` Button btnSetFont = findViewById(R.id.btnSetFont); TextView tvText = findViewById(R.id.tvText); btnSetFont.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { // 弹出单选对话框 showFontSizeDialog(); } }); ``` 3. 编写弹出单选对话框的方法,代码如下: ``` private void showFontSizeDialog() { final String[] items = {"小号", "中号", "大号"}; // 单选列表项 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("选择字体大小"); builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { // 根据选择的字体大小设置文本框的字体 switch (i) { case 0: tvText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 14); break; case 1: tvText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 18); break; case 2: tvText.setTextSize(TypedValue.COMPLEX_UNIT_SP, 22); break; } dialogInterface.dismiss(); // 关闭对话框 } }); builder.show(); } ``` 4. 运行程序,点击“设置字体大小”按钮,就可以弹出单选对话框并选择字体大小了。选择后,文本框的字体大小会随之改变。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值