onConfigurationChanged的Android旋转问题

时间:2011-07-15 13:55:49

标签: android layout rotation orientation onconfigurationchanged

我在清单中将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()不起作用。 有关它的任何建议吗?

感谢。

3 个答案:

答案 0 :(得分:4)

除非绝对必要,否则不应使用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

答案 1 :(得分:0)

如果您在活动中指定android:configChanges="orientation|keyboard",那么Android将不会为您处理此更改(意味着它不会使用正确的资源文件重新创建您的活动)。这就是为什么你没有得到字体大小的变化。如果您希望Android处理此问题,请不要将configChanges添加到Manifest中的Activity。

答案 2 :(得分:0)

您可以为两种布局类型实际指定两种不同的布局文件,并根据需要配置每种布局文件。

一些文档:Application Resources

如果您想要的是根据可能是首选方法的方向进行化妆品设计更改