我想让我的应用程序与Android Nougat兼容,特别是密度更改和字体大小更改。
我在测试中所做的是:
如果我不使用清单中的密度值来监听配置更改,它会重新创建我的活动(这不好,因为我有一些过滤器并且我丢失了它们)。 如果我听它们的话,在作为参数传递的newConfig值中,densityDpi值与我使用getResources()得到的值相同.getConfiguration()。densityDpi。
清单上的当前行如下:
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation|keyboardHidden|density"
我尝试过这样的事情:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// some code
if(mOldConfiguration != null && newConfig.densityDpi!= mOldConfiguration.densityDpi){
// Neither densityDpi nor fontScale works, they are always the same
}
if(mOldConfiguration != null && newConfig.fontScale != mOldConfiguration.fontScale){
// I will later have a method which will recreate the activity with my filters saved
recreate();
}
mOldConfiguration = newConfig;
}
我已经听过其他配置更改,但无法弄清楚如何在此方法中检测到更改是密度/字体大小更改。
答案 0 :(得分:0)
您可以通过在清单文件中添加此行来收听密度更改:
$last_title = "";
for($x=0, $n=count($result); $x < $n; $x++){
if($last_title != $result[$x]["movie_title"])
{
$last_title = $result[$x]["movie_title"];
echo $last_title.' - <img src="'.$result[$x]["image_url"].'"/>';
}
else
echo '<img src="'.$result[$x]["image_url"].'"/>';
}
在活动中,您可以在进行更改时获取新配置值:
android:configChanges="density"
随着字体大小的变化,您可以添加如下代码:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Log.e("TRUNGDH", newConfig.densityDpi + "<= densityDpi");
}
android:configChanges="fontScale"