如何使应用程序中的字体大小不受更改设置字体大小的影响

时间:2014-02-04 06:58:08

标签: android android-layout android-listview

当设置 - >显示 - > FontSize上的字体大小为“正常”时,我的应用程序按设计运行良好。

当我将字体大小更改为小/大时,整个内容将被混淆。我的应用程序内容密集,这对应用程序造成严重影响。

让我们说,动作栏标题就像“隐私和设置”。当系统设置中字体大小设置为“大”时,标题将运行边界/椭圆形。列表视图内容看起来很可悲。

有没有办法确保“设置” - >“字体”中的更改不会影响我们的应用?

Flipboard app可以做到这一点。

4 个答案:

答案 0 :(得分:1)

我终于得到了解决方案。 谷歌严格建议使用“sp”字体。但是,如果您不希望根据用户字体设置缩放文本,请使用“dp”。如果您转到settings-> fonts字体,则字体大小在给定设备中不会更改。您的UI将保持与您为其设计的一样。

感谢Aswin的投入。感谢Joseph Earl在Android sp vs dp texts - what would adjust the 'scale' and what is the philosophy of support

回答问题

答案 1 :(得分:1)

最好按照谷歌的建议,即使用'sp'而不是'dp'。这是一个帮助我的更新解决方案 - Solution

 //in base activity add this code.
public  void adjustFontScale( Configuration configuration) {

    configuration.fontScale = (float) 1.0;
    DisplayMetrics metrics = getResources().getDisplayMetrics();
    WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
    wm.getDefaultDisplay().getMetrics(metrics);
    metrics.scaledDensity = configuration.fontScale * metrics.density;
    getBaseContext().getResources().updateConfiguration(configuration, metrics);

}

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    adjustFontScale( getResources().getConfiguration());
}  

答案 2 :(得分:0)

以下是您可以做到的方法,但我不推荐。

float scale = getResources().getConfiguration().fontScale;
// This scale tells you what the font is scaled to.
// So if you want size 16, then set the size as 16/scale
float sizeNeeded = 16.0;
textView.setTextSize(sizeNeeded/scale);

希望这有帮助。

答案 3 :(得分:0)

在textSize中使用dp或dip代替sp