我在manifest中给了我的活动android:configChanges="orientation|keyboard",当我旋转我的设备时,onConfigurationChanged总是被调用。没问题。
我想要的是当设备旋转时,小部件的字体大小会改变。

<TextView android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="@dimen/my_font_size" />

与上面一样,textSize属性引用资源中的值
定义my_font_size的xml文件位于values land,values port文件夹中。
好啊。我准备好了。构建它,运行它,并旋转设备,没有变化。
onconfigurationchanged()中的requestlayout()不起作用。
有什么建议吗?
谢谢。

最佳答案

除非绝对必要,否则不应使用configChanges属性(引入此属性是为了启用某些性能敏感的场景)。请仔细阅读Handling Runtime [Congiuration] Changes
这种技术[使用configChanges]应被视为最后手段,不建议用于大多数应用。
在警告过您之后,这里有一个解释,为什么您在旋转设备时看不到更改。
如果不在活动上使用configChanges="orientation",则会销毁活动,并使用资源重新创建新方向的活动。在这种情况下,onCreate()中的代码将自动从正确的资源(*-land*-port)中选择值。
如果你确实使用了configChanges="orientation"你基本上是在告诉android不要自动应用更改,你将在onConfigurationChanged()中自己完成。
假设您确实需要保留configChanges,下面是您可以解决字体大小问题的方法:

@Override
public void onConfigurationChanged(Configuration newConfig)
{
     super.onConfigurationChanged(newConfig);

     int fontSize = getResources().get(R.id.font_size);
     mTextView.setTextSize(fontSize);
}

但是,在大多数情况下,您确实不应该使用configChanges

10-08 08:14