Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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_Android Layout_Android Listview - Fatal编程技术网

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

Android 如何使应用程序中的字体大小不受更改字体大小设置的影响,android,android-layout,android-listview,Android,Android Layout,Android Listview,当字体大小在设置->显示->字体大小上处于“正常”时,我的应用程序按照设计运行良好 当我将字体大小更改为“小/大”时,整个内容都被混合在一起。我的应用程序是内容密集型的,这严重影响了应用程序 比如说,动作栏的标题就像“隐私和设置”。当“系统设置”中的“字体大小”设置为“大”时,标题会越界/省略。listview内容看起来很可怜 有没有办法确保设置->字体中的更改不会影响我们的应用程序 Flipboard应用程序可以做到这一点。以下是您可以做到的方法,但我不推荐 float scale = get

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

当我将字体大小更改为“小/大”时,整个内容都被混合在一起。我的应用程序是内容密集型的,这严重影响了应用程序

比如说,动作栏的标题就像“隐私和设置”。当“系统设置”中的“字体大小”设置为“大”时,标题会越界/省略。listview内容看起来很可怜

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


Flipboard应用程序可以做到这一点。

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

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);

希望这有帮助。

我终于找到了解决办法。 谷歌严格建议字体使用“sp”。但是,如果不希望根据用户字体设置缩放文本,请使用“dp”。如果转到设置->字体,则给定设备中的字体大小不会改变。您的UI将保持与您设计它时所用的一样


感谢Aswin的支持。感谢Joseph Earl在

上回答了这个问题,在textSize中使用dp或dip而不是sp

最好遵循谷歌的建议,即使用“sp”而不是“dp”。这是一个更新的解决方案,它帮助我-


您是否意识到,提高默认字体大小的确切用户是无法阅读较小字体的人,因此故意更改了字体?是的,我同意设置是为了用户的利益。但这就是要求。我读起来就像,我应该自定义Textview并覆盖setTextSize,然后在那里添加这个缩放计算。对应用程序中使用的所有文本视图使用此选项。如果用户更改其显示比例,则字体大小仍将更改,从而更改dp的比例。这个链接可能会有所帮助
 //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());
}