3

我在清单中给android:configChanges="orientation|keyboard"了我的活动,当我旋转我的设备时,onConfigurationChanged总是被调用。没问题。

我想要的是当设备旋转时,小部件的字体大小会改变。

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

和上面一样,textSize属性引用资源中的值,定义的 xml 文件my_font_size位于 values-land、values-port 文件夹中。

好的。我准备好了。构建它,运行它,然后旋转设备,没有任何变化。onConfigurationChanged() 中的 requestLayout() 不起作用。有什么建议吗?

谢谢。

4

3 回答 3

4

除非绝对必要,否则不应使用configChanges属性(引入此属性是为了启用某些性能敏感的场景)。请仔细阅读处理运行时 [配置] 更改

这种技术 [using 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在大多数情况下使用。

于 2011-07-15T14:23:31.797 回答
0

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

于 2011-07-15T14:15:47.797 回答
0

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

一些文档:应用程序资源

如果您只想根据方向进行外观设计更改,这可能是首选方法

于 2011-07-15T16:27:52.887 回答