zoukankan      html  css  js  c++  java
  • Android Lock Screen Orientation

    一些与屏幕有关的基础知识:
    
    //这个是手机屏幕的旋转角度 
    final int rotation = this.getWindowManager().getDefaultDisplay().getOrientation();
    
    rotation值有:
    Surface.ROTATION_0 
    Surface.ROTATION_90
    Surface.ROTATION_180
    Surface.ROTATION_270
     
    
    //这个是读取当前Activity 的屏幕方向
    final int orientation = this.getResources().getConfiguration().orientation;
    
    orientation值有:
    Configuration.ORIENTATION_PORTRAIT
    Configuration.ORIENTATION_LANDSCAPE
    
    //这个是设置Activity 的屏幕方向,与AndroidManifest.xml中的android:screenOrientation="landscape"配置等同
    this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
    

      

    Build.VERSION:Various version strings.

    android.os.Build.VERSION.SDK_INT:The user-visible SDK version of the framework; its possible values are defined in Build.VERSION_CODES.

    Build.VERSION_CODES:Enumeration of the currently known SDK version codes. These are the values that can be found in SDK. Version numbers increment monotonically with each official platform release.

    android.os.Build.VERSION_CODES.FROYO:June 2010: Android 2.2

    The REVERSE_LANDSCAPE and REVERSE_PORTRAIT appear after android 2.3,so we can not use them on android 2.2 and former devices.

    复制代码
    private void disableRotation()
        {       
            final int orientation = getResources().getConfiguration().orientation;
            final int rotation = getWindowManager().getDefaultDisplay().getOrientation();
    
            // Copied from Android docs, since we don't have these values in Froyo 2.2
            int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
            int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
    
            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)
            {
                SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            }
    
            if (rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_90)
            {
                if (orientation == Configuration.ORIENTATION_PORTRAIT){
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                }
                else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                }
            }
            else if (rotation == Surface.ROTATION_180 || rotation == Surface.ROTATION_270) 
            {
                if (orientation == Configuration.ORIENTATION_PORTRAIT){
                    setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
                }
                else if (orientation == Configuration.ORIENTATION_LANDSCAPE){
                    setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
                }
            }
        }
    复制代码

    enable the rotation:

    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

    About the rotation and orientation,on some devices,the Surface.ROTATION_0 corresponds to ORIENTATION_LANDSCAPE,but others,may ORIENTATION_PORTRAIT.So we have to so some work to judge it.

    However,for some reason ROTATION_90 corresponds to SCREEN_ORIENTATION_REVERSE_PORTRAIT on the Xoom if you use the above method.So another method appears:

    复制代码
     private void disableRotation()
        {       
            final int orientation = getResources().getConfiguration().orientation;
            final int rotation = getWindowManager().getDefaultDisplay().getOrientation();
    
            // Copied from Android docs, since we don't have these values in Froyo 2.2
            int SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 8;
            int SCREEN_ORIENTATION_REVERSE_PORTRAIT = 9;
    
            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.FROYO)
            {
                SCREEN_ORIENTATION_REVERSE_LANDSCAPE = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
                SCREEN_ORIENTATION_REVERSE_PORTRAIT = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT;
            }
    
            if (orientation == Configuration.ORIENTATION_PORTRAIT) {
                if (rotation == Surface.ROTATION_0|| rotation == Surface.ROTATION_270) 
                    // 0 for phone, 270 for tablet
                {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
                } else {
                    setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_PORTRAIT);
                }
            } else {
                if (rotation == Surface.ROTATION_90|| rotation == Surface.ROTATION_0) 
                    // 90 for phone, 0 for tablet
                {
                    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
                } else {
                    setRequestedOrientation(SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
                }
            }
            
        }
    复制代码

    i'm not sure the note "//0 for phone, 270 for tablet" and "// 90 for phone, 0 for tablet" are right on any device,but at least it works well in my device.so I use the latter one.

    When you want to disable/enable the autorotation of the device ,you have to write the settings.

  • 相关阅读:
    《jmeter:菜鸟入门到进阶系列》
    Jmeter下载时Binaries和Source两类包的区别
    MySQL5.7 四种日志文件
    Windows下配置nginx+php(wnmp)
    回望2018,计划2019
    C# 单元测试(入门)
    C# 中out,ref,params参数的使用
    C# 程序运行中的流程控制
    Nacos(五):多环境下如何“读取”Nacos中相应的配置
    Nacos(四):SpringCloud项目中接入Nacos作为配置中心
  • 原文地址:https://www.cnblogs.com/janehlp/p/5249158.html
Copyright © 2011-2022 走看看