Android Lock Screen Orientation
2016-03-07 00:20
429 查看
一些与屏幕有关的基础知识: //这个是手机屏幕的旋转角度 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.
相关文章推荐
- Android Activity之间跳转与传值
- java回调机制以及android中的回调方法
- android--存储
- thinking for android's animation
- ImageView 的使用
- Anubis,一个支持Android apk(Android binaries)行为分析的在线沙盘
- Android开发自学笔记(Android Studio) 目录
- android群英传之自定义View--对现有控件进行扩展(1)
- Android掌中游斗地主游戏源码完整版
- Android Studio实现代码混淆
- Android 定时器实现方式
- Android 计算地球上任意两点(经纬度)距离
- Android 日期时间选择控件
- Android 翻滚的TextView
- Android 将数据库文件保存至sdcard中
- Android 本地文件管理类
- Android 读取本地txt文件中的内容
- Android应用安全之Content Provider安全
- px in pt dp(dip) sp in Android
- android监听左右滑动事件