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