我在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
。