Android 设置屏幕只能横屏旋转,不能竖屏

package com.yhy.myapplication22;

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.util.Log;
import android.view.OrientationEventListener;

/**
 * Created by ${yinhaiyang} on 2018/4/3.
 * android的屏幕旋转只能一次旋转90度,如果你突然一下子旋转180度,
 * onConfigurationChanged函数不会被调用。
 * 所以此时可以通过调用这个监听方法实现
 */

public class MyOrientationDetector extends OrientationEventListener {
    MyOrientationDetector detector;
    Activity mContext;
    int rate;




    public MyOrientationDetector(Context context) {
        super(context);
        this.mContext = (Activity) context;
    }


    public MyOrientationDetector(Context context, int rate) {
        super(context, rate);
        this.mContext = (Activity) context;
        this.rate = rate;


    }

    @Override

    public void onOrientationChanged(int orientation) {

        Log.i("MyOrientationDetector ", "onOrientationChanged:" + orientation);


        final int rotation = mContext.getWindowManager().getDefaultDisplay().getOrientation();


        if (orientation == OrientationEventListener.ORIENTATION_UNKNOWN) {

            return;  //手机平放时,检测不到有效的角度

        }

        //只检测是否有四个角度的改变

        if (orientation > 350 || orientation < 10) { //0度

            orientation = 0;

        } else if (orientation > 80 && orientation < 100) { //90度

            orientation = 90;

        } else if (orientation > 170 && orientation < 190) { //180度

            orientation = 180;

        } else if (orientation > 260 && orientation < 280) { //270度

            orientation = 270;

        } else {

            return;

        }


        if (orientation == 0)

        {
            mContext.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横向


        } else if (orientation == 90)

        {
            mContext.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);//希望Activity在横向屏幕上显示,但与正常的横向屏幕方向相反。


        } else if (orientation == 180)

        {
            mContext.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);//希望Activity在横向屏幕上显示,但与正常的横向屏幕方向相反。


        } else if (orientation == 270)

        {

            mContext.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//横向

        }


    }
}

注:其他调用的方法参考上篇文章《AndroidPad设置只支持三个方向旋转(正方向竖屏0度方向,90度和270度横屏方向)地址:点击打开链接

 screenOrientation的属性值必须是以下常量值。
        1 ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED:// 不指定方向,让系统决定Activity的最佳方向。
        2 ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE://希望Activity在横向屏上显示,也就是说横向的宽度要大于纵向的高度,并且忽略方向传感器的影响。
        3 ActivityInfo.SCREEN_ORIENTATION_PORTRAIT:// 希望Activity在纵向屏上显示,也就是说纵向的高度要大于横向的宽度,并且忽略方向传感器的影响。
        4 ActivityInfo.SCREEN_ORIENTATION_USER://使用用户设备的当前首选方向。
        5 ActivityInfo.SCREEN_ORIENTATION_BEHIND://始终保持与屏幕一致的方向,不管这个Activity在前台还是后台。
        6. ActivityInfo.SCREEN_ORIENTATION_SENSOR:.//Activity的方向由物理方向传感器来决定,按照用户旋转设备的方向来显示。
        7 ActivityInfo.SCREEN_ORIENTATION_NOSENSOR:.//始终忽略方向传感器的判断,当用户旋转设备时,显示不跟着旋转。
        8 ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE://希望Activity在横向屏幕上显示,但是可以根据方向传感器指示的方向来进行改变。
        9 ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT://希望Activity在纵向屏幕上显示,但是可以根据方向传感器指示的方向来进行改变。
        10 ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE://希望Activity在横向屏幕上显示,但与正常的横向屏幕方向相反。
        11 ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT:// 希望Activity在纵向屏幕上显示,但与正常的纵向屏幕方向相反
        12 ActivityInfo.SCREEN_ORIENTATION_FULL_SENSOR: //Activity的方向由方向传感器来决定,显示会根据用户设备的移动情况来旋转。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值