Setting the orientation for only 1 fragment in my

2019-01-13 20:33发布

问题:

My app needs to be in portrait mode so I set it in the manifest by:

android:screenOrientation="portrait"

But I just recently added another fragment (FragA) that just looks and functions 10x better in landscape. Is there something I can put inside of my FragA to just make that fragment in landscape while retaining the rest of the app in portrait or by doing this will I have to add something to my other fragments to keep them retained as portrait?

回答1:

Orientation attribute is per activity so you can declare the orientation for only the activity that contains the fragment so that it is in landscape and the rest of the activities will remain as they are.



回答2:

Use the following code line in the fragment where you want a specific (in this case portrait) orientation.

getActivity().setRequestedOrientation(
            ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

If you want to have a orientation in a fragment, that is based on the way the user holds his device, then use the following code line.

getActivity().setRequestedOrientation(
                ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

Hope, this will give you the intended solution.



回答3:

In each of your fragments, set the requested orientation.

Reference doc: 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);
}


回答4:

In your fragment FragA :

@Override
public void onResume() {
    super.onResume();
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

}


@Override
public void onPause() {
    getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    super.onPause();
}

onPause method code ensure your activity back to portrait orientation