Android:不要旋转 activity 的屏幕(无清单)

Android: Don't rotate the screen of the activity (No Manifest)

我知道我必须使用 android:screenOrientation="portrait/landscape" 如果我不想改变屏幕的旋转,但我在清单中这样做了。我想在 java class 中做同样的事情。我该怎么做?

这是我的代码

public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState)
    {
        switch (getArguments().getInt(ARG_SECTION_NUMBER))
        {
            case 1:
                View rootView = inflater.inflate(R.layout.fragment_cubo, container, false);
                return rootView;

            case 2:
                View rootView2 = inflater.inflate(R.layout.fragment_cubo2, container, false);
                return rootView2;

            case 3:
                View rootView3 = inflater.inflate(R.layout.fragment_cubo3, container, false);
                return rootView3;

            case 4:
                View rootView4 = inflater.inflate(R.layout.fragment_cubo4, container, false);
                return rootView4;

            default:
                View rootView0 = inflater.inflate(R.layout.fragment_cubo, container, false);
                return rootView0;
        }
    }

而且我只想在情况2和情况3中更改屏幕的位置,但我想不起方法setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORT‌​RAIT);

因为无法从静态上下文中引用它(方法 onCreateView 在 class 静态中)

我该怎么做?

像这样:

 activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

https://developer.android.com/reference/android/content/pm/ActivityInfo.html#SCREEN_ORIENTATION_LANDSCAPE


很棒的博客 post 这里的主题:https://www.novoda.com/blog/portrait-only-apps/ :-)


你不应该真的更新问题,而是提出新问题。

您需要覆盖具有 activity 参数的回调方法,或将参数保存为字段。因此,您可能需要 运行 switch 语句两次。

@Override
public void onAttach(Activity activity) {
    // your switch statement  
   activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

您可以在此处阅读更多内容:https://developer.android.com/reference/android/app/Fragment.html#Lifecycle

您可以通过以下功能完成此操作

 public void changeOrientation() {

    if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    } else {
        getActivity().setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }
}