带有onConfigurationChanged的Android旋转问题

我在清单中为我的活动提供了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.

This technique [using configChanges] should be considered a last resort and is not recommended for most applications.

在警告您之后,这里说明了为什么旋转设备时看不到更改.

>如果您不对活动使用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.

上一篇:php – 使用Mikehaertl的WkHtmlToPdf创建Landscape PDF


下一篇:JavaScript-Windows Phone 8:无法识别CSS方向