Skip to content Skip to sidebar Skip to footer

How To Correctly Make A Fragment Rotate

I am trying to create a fragment for an app that will be rotated before shown (so as to avoid changing to landscape and portrait because I wish to avoid the activity being created

Solution 1:

I finally found the answer Change Screen Orientation programmatically using a Button

but since it is a fragment I wish to rotate not the whole screen the code is like this:

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (mView != null) return mView; //I use this because I use the same fragment , if you use different fragments remove this
    mView = (LinearLayout) inflater.inflate(R.layout.fragment_customer_card_view, container, false);
    intw= container.getWidth();
    inth= container.getHeight();
    mView.setRotation(90);
    mView.setTranslationX((w - h) / 2);
    mView.setTranslationY((h - w) / 2);
    ViewGroup.LayoutParamslp= mView.getLayoutParams();
    lp.height = w;
    lp.width = h;
    mView.requestLayout();
    return mView;
}

hope it helps someone in the future

Solution 2:

Use this in the fragment where u want want orientation .

getActivity().setRequestedOrientation(
            ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

If you many fragments and only one fragment u wantin portrait others should be compatible based on user then make sure to give above in fragment where u want portrait orientation always and in other fragmetns use

getActivity().setRequestedOrientation(
                ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

Solution 3:

Does setting orientation="horizontal" not do the trick?

More generally, recreating the Activity shouldn't be a huge deal for you. You should just be able to persist all of your changes and then pull them out of the Bundle that is passed to onCreate. If that is a large problem I would reconsider some of the design choices you're making in your app.

Post a Comment for "How To Correctly Make A Fragment Rotate"