我发现,重写getResources()
之后,应用程序的第一个运行活动也将对以后运行的活动生效,只要您的手机具有非常大的字体。
例如:执行以下步骤
getResources()
,而B不执行任何特殊操作。然后我梳理了源代码,包括活动启动过程,我猜配置缓存在哪里,可以使用以下正在运行的活动,但最终没有找到
这与一项活动有关:
@Override
public Resources getResources() {
Resources resources = super.getResources();
try {
if (resources != null) {
Configuration newConfig = resources.getConfiguration();
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
if (newConfig.fontScale != 1) {
newConfig.fontScale = 1;
if (Build.VERSION.SDK_INT >= 17) {
Context configurationContext = createConfigurationContext(newConfig);
resources = configurationContext.getResources();
displayMetrics.scaledDensity = displayMetrics.density * newConfig.fontScale;
} else {
resources.updateConfiguration(newConfig, displayMetrics);
}
}
}
Log.d(TAG, "A-Activity fontScale :" + resources.getConfiguration().fontScale + " ");
return resources;
} catch (Exception e) {
}
return resources;
}
并且B活动不执行任何特殊操作。
@Override
public Resources getResources() {
Resources resources = super.getResources();
Log.d(TAG, "B-Activity fontScale :" + resources.getConfiguration().fontScale + " ");
return super.getResources();
}
和运行应用程序后的结果,关于Logcat:
2019-01-28 10:46:22.006 B-Activity fontScale :1.3
2019-01-28 10:46:22.007 B-Activity fontScale :1.3
2019-01-28 10:46:26.675 A-Activity fontScale :1.0
2019-01-28 10:46:26.675 A-Activity fontScale :1.0
2019-01-28 10:46:29.818 B-Activity fontScale :1.0
2019-01-28 10:46:29.818 B-Activity fontScale :1.0
所以我很困惑,android如何在内部工作,让上一个活动的getResources()
的设置对下一个活动生效,个人猜测在ActivityStack
中处理,但是不能当然,我希望给大家指点,非常感谢。
答案 0 :(得分:1)
默认情况下,同一应用程序中的活动将共享相同的配置。
如果您调试应用程序,则会发现A.getResources().getConfiguration()
返回与Configuration
相同的B.getResources().getConfiguration()
实例。因此,在A中修改Configuration
之后,它也会影响B中的Configuration
。
尝试将Configuration newConfig = resources.getConfiguration();
替换为Configuration newConfig = new Configuration(resources.getConfiguration());
有关更多详细信息,请参见源代码ResourcesManager.updateResourcesForActivity
。