java - 单击按钮时 setRequestedOrientation 后自动旋转不起作用

标签 java android android-layout autorotate

我有这个视频 View 。它有一个全屏按钮作为 Controller 。自动旋转一开始是正常的,但是每当点击全屏按钮时,屏幕就会旋转到横向,当我尝试自动旋转时,它不会自动旋转到纵向。

这是我的视频 View 和 Controller 的屏幕截图。

enter image description here 这是我的全屏按钮 onClickEvent 代码

mFullScreen.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                //To fullscreen
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                mFullScreen.setImageResource(R.drawable.fullscreen);
                toolbar.setVisibility(View.VISIBLE);
                updateMetadata(false);

            } else {

                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                getSupportActionBar().hide();
                mFullScreen.setImageResource(R.drawable.normal_screen);
                toolbar.setVisibility(View.INVISIBLE);
                updateMetadata(true);
            }
        }
    });

这是我的 onConfiguration 更改方法

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    getSupportActionBar().show();
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        getSupportActionBar().hide();
        toolbar.setVisibility(View.INVISIBLE);
        try {
            channelNameText.setVisibility(View.GONE);
            channelImage.setVisibility(View.GONE);
        } catch (NullPointerException ne) {
            ne.printStackTrace();
        }

        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
        }
        updateMetadata(false);

    } else {

        Logger.e("Orientation", "ORIENTATION_POTRAIT");

        try {
            channelNameText.setVisibility(View.VISIBLE);
            channelImage.setVisibility(View.VISIBLE);
        } catch (NullPointerException ne) {
            ne.printStackTrace();
        }

        mFullScreen.setImageResource(R.drawable.fullscreen);

        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
        getWindow().clearFlags(
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
            getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
        }
        updateMetadata(true);
    }
}

onConfiguration 方法被调用,但仅当我们按下全屏按钮时。如何在 setRequestedOrientation 后启用自动旋转?

最佳答案

如果您想根据需要随时更改 Activity 的方向模式,那么下面是执行相同操作的 Java 代码。当我们讨论上面所有的 Android 屏幕方向模式时,我们可以随时从 java 代码中设置任何模式。下面是横向和纵向模式的示例。但是您可以以相同的方式设置所有可用模式。将以下代码行放在您的 Activity java 文件中的任何位置,您要在其中更改 Activity 的屏幕方向。例如,如果想在显示屏幕之前设置一个特定的方向,那么您可以在 Activity 的 onCreate() 函数中添加代码。

横向模式

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

人像模式

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

Note: While adding this code, don’t forget to import the package import android.content.pm.ActivityInfo; in to your code.

有时,您想在运行时以编程方式获取当前屏幕的屏幕方向。要获得相同的效果,您可以在 activity.java 文件中尝试以下 java 代码。

//Get current screen orientation
        Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
        int orientation = display.getOrientation(); 
         switch(orientation) {
            case Configuration.ORIENTATION_PORTRAIT:
                setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                break;
            case Configuration.ORIENTATION_LANDSCAPE:
                setRequestedOrientation (ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                break;                  
        }

注意:不要忘记为上面的代码导入下面的包。

import android.view.Display;
import android.content.res.Configuration;
import android.view.WindowManager;

关于java - 单击按钮时 setRequestedOrientation 后自动旋转不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44839486/

相关文章:

java - 将 Scanner 类的两个实例压缩为一个

Java:颜色数组不会循环遍历

android - ListView NullPointerException @ ArrayAdapter.createViewFromResource

java - Android日历10分钟后删除日历和事件

android - Android 中两个 View 的垂直中心对齐

Java 的扫描器。如何匹配空白?

java - 我应该在 Spring 和 Android 中使用一种 Java 模型表示吗?

sqlite中的Android真实转义字符串

android - 如何修复我的 onclick 监听器,以便我不必单击两次即可在单击标题时触发事件?

android - getViewByID 为 Listview 返回 null