我有一个活动和几个片段(它们称为片段A和片段B)。 现在fragmentA需要同时具有纵向和横向布局。 fragmentB 必须保持纵向。该活动在 onCreate 方法中显示fragmentA。 我尝试了这个链接:https://stackoverflow.com/a/53864286/15351040 在fragmentA中添加了以下代码。
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
activity?.let {
it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR
}
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onDestroyView() {
super.onDestroyView()
activity?.let {
it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
}
}
并在fragmentB中添加了以下代码。
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
activity?.let {
it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
}
return super.onCreateView(inflater, container, savedInstanceState)
}
override fun onDestroyView() {
super.onDestroyView()
activity?.let {
it.requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED
}
}
但是当我打开fragmentB时,fragmentA又被打开,而不是fragmentB。也许当 Activity 的 requestOrientation 改变时,会调用 Activity 的 onCreate 。 当fragmentA为纵向时效果很好,但在横向时则不然。
我现在应该做什么?
在 AndroidManifest.xml 中添加带有 Activity 方向值的 configChanges 标签。例如:
<activity
android:name=".ui.activity.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize|screenLayout" />