2012-10-03 10 views
28

我的应用程序需要在纵向模式下,所以我把它的表现是:设置方向只有1片段在我的活动,而其余的是在纵向

android:screenOrientation="portrait" 

但我刚刚加入另一个片段(FragA),它的外观和功能在横向上都能提高10倍。有什么我可以放在我的FragA里面,只是在横向上制作片段,同时保留纵向应用的其余部分,或者通过这样做,我不得不添加一些东西到我的其他片段,以保留它们作为肖像?

回答

11

方向属性是针对每个活动的,因此您可以仅为包含片段的活动声明方向,以使其处于横向状态,其余活动将保持原样。

+0

所以基本上我最好的选择是只创建另一个活动,然后在我的清单只是把那为:机器人:screenOrientation =“风景”? –

+0

是的,这将确保您的功能永远不会失败。 –

+0

@DineshVenkata但我不想旋转片段而不是活动做什么 – PriyankaChauhan

74

在您想要特定(在此情况下是纵向)方向的片段中使用以下代码行。

getActivity().setRequestedOrientation(
      ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

如果您希望在片段中有一个方向,即基于用户握住他的设备的方式,请使用以下代码行。

getActivity().setRequestedOrientation(
       ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 

希望,这会给你预期的解决方案。

+0

我在片段事务提交之前在活动代码中使用了此代码。在片段onAttach()/ onStop()中使用它不起作用。我在KitKat atm上测试。 – WindRider

+2

更正:在检查哪些片段当前处于活动状态后,看起来像调用setRequestedOrientation()的更好的地方在OnBackStackChangedListener中。这种方法可以在重新启动活动时实现更好的视觉转换。 – WindRider

+0

我使用片段的onCreateView中的这些行工作() –

11

在每个片段中,设置请求的方向。

参考文档:http://developer.android.com/reference/android/content/pm/ActivityInfo.html

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // Fragment locked in portrait screen orientation 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);  

    // Fragment locked in landscape screen orientation 
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 

    // Fragment screen orientation normal both portait and landscape  
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
} 
相关问题