如何在不锁定活动方向的情况下锁定片段方向?
Posted
技术标签:
【中文标题】如何在不锁定活动方向的情况下锁定片段方向?【英文标题】:How to lock fragment orientation without locking activity orientation? 【发布时间】:2013-12-20 15:50:51 【问题描述】:我有一个特定的用例,我希望将片段锁定为纵向模式,但仍旋转活动(和/或同一活动中可见的其他片段)。有可能吗?
所有锁定片段方向的解决方案都建议使用 setRequestedOrientation 并锁定活动方向,但我需要其他可见片段来旋转。
我的应用支持 API 10+(如果有使用 API 11+ 的好解决方案,我可能会考虑在 API
提前致谢。
【问题讨论】:
【参考方案1】:看看这个答案:
在每个片段中覆盖 setUserVisibleHint()。
在肖像中只有碎片:
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser)
Activity a = getActivity();
if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
在纵向/横向片段中:
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
super.setUserVisibleHint(isVisibleToUser);
if(isVisibleToUser)
Activity a = getActivity();
if(a != null) a.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR);
这将允许整个活动在一个片段中旋转,但在其他片段中将其固定为纵向。
回答者: https://***.com/a/13252788/2767703
【讨论】:
不,这不起作用。我希望活动旋转,而不是片段。 setRequestOrientation 锁定活动方向,我在问题中已经说过这不是我想要的。 那是不可能的,你不能只旋转没有片段的活动。您可以只锁定某些片段的方向。portrait only fragments
snipet 在应用以横向模式启动时两次调用 onResume()。在 HTC One 上测试
请注意,SCREEN_ORIENTATION_FULL_SENSOR 将忽略用户设置并始终根据传感器位置旋转屏幕。如果您希望应用用户轮换设置,请改用 SCREEN_ORIENTATION_UNSPECIFIED【参考方案2】:
回复可能有点晚了,但我可以看到您还没有找到解决方案,您可以尝试这样做,每当您从活动中调用片段时,请在其前面添加以下代码
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
对于所有其他/默认片段
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
希望对我有所帮助
【讨论】:
这工作正常。但是当按下后退按钮时,前面的片段也改变了方向。那么我们如何才能阻止以前的片段改变它们的方向呢? 编写一个基本片段并应用@bikash 在其中写的内容。然后让你的所有其他片段继承自这个片段,以传播行为。以上是关于如何在不锁定活动方向的情况下锁定片段方向?的主要内容,如果未能解决你的问题,请参考以下文章