博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

028、动态更改屏幕方向及捕捉屏幕改变事件

Posted on 2013-09-27 22:11  mz_zyh  阅读(546)  评论(0编辑  收藏  举报
1、动态改变屏幕方向
在Android中,通过setRequestedOrientation()方法更改屏幕方向,通过getRequestedOrientation()方法获取屏幕方向
注意,要在AndroidManifest.xml文件中,添加android:screenOrientation="portrait",可添加在Activity下。
方法一,根据getRequestedOrientation()判断当前屏幕显示方向,代码如下:
                switch (getRequestedOrientation()) {
                case ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE://当前横屏,转为竖屏
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                    break;
                case ActivityInfo.SCREEN_ORIENTATION_PORTRAIT://当前竖屏,转为横屏
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                    break;
                default:
                    Toast.makeText(MainActivity.this, "getRequestedOrientation()="+getRequestedOrientation(), 0).show();
                    break;
                }

  

方法二,更加屏幕宽高比判断方向,代码如下:
        final Display display = getWindow().getWindowManager().getDefaultDisplay();
 
                if(display.getWidth()>display.getHeight()){
                    //当前横屏,转为竖屏
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }else{
                    //当前竖屏,转为横屏
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
            }

 

2、捕获屏幕改变事件:
在AndroidManifest.xml文件中,需要添加权限
 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>

 

在对应Activity节点中添加android:configChanges="orientation|keyboard"
java代码如下:
复写onConfigurationChanged方法
    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        switch (newConfig.orientation) {
        case Configuration.ORIENTATION_LANDSCAPE:
            bt.setText("旋转为竖屏");
            break;
        case Configuration.ORIENTATION_PORTRAIT:
            bt.setText("旋转为横屏");
            break;
        }
    }