为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Android上检查设备自然(默认)方向

如何在Android上检查设备自然(默认)方向

千万里不及你 2019-11-30 13:44:46
我有一个活动显示来自摄像机的预览,因此仅需要将其设置为横向。在底部(无论设备旋转如何),我想显示一个文本视图。我正在使用OrientationEventListener,它从其自然位置给出设备的方向。我可以实现一个在纵向默认设备上运行良好的解决方案,但要使其在横向默认设备上也可以运行,我需要知道在此类设备上运行。因此问题是如何检查?
查看完整描述

3 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

此方法可以帮助:-


public int getDeviceDefaultOrientation() {


    WindowManager windowManager =  (WindowManager) getSystemService(Context.WINDOW_SERVICE);


    Configuration config = getResources().getConfiguration();


    int rotation = windowManager.getDefaultDisplay().getRotation();


    if ( ((rotation == Surface.ROTATION_0 || rotation == Surface.ROTATION_180) &&

            config.orientation == Configuration.ORIENTATION_LANDSCAPE)

        || ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) &&    

            config.orientation == Configuration.ORIENTATION_PORTRAIT)) {

      return Configuration.ORIENTATION_LANDSCAPE;

    } else { 

      return Configuration.ORIENTATION_PORTRAIT;

    }

}


查看完整回答
反对 回复 2019-11-30
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

好吧,您可以找出@Urboss所说的当前方向是什么。您无法以这种方式获取布局(横向/纵向),因此您必须获取屏幕宽度/高度才能检查当前(是否已更改,但您已经检查过;))位置是否为横向。或肖像:


    DisplayMetrics dm = new DisplayMetrics();

    getWindowManager().getDefaultDisplay().getMetrics(dm);

    wPix = dm.widthPixels;

    hPix = dm.heightPixels;

(因此,如果旋转角度为0,并且您获得的景观水平高于metrix,则您的设备为默认水平景观。如果旋转角度为90度并且您是纵向的,则默认情况下也为水平景观,依此类推)


查看完整回答
反对 回复 2019-11-30
?
慕码人2483693

TA贡献1860条经验 获得超9个赞

经过数小时的尝试来解决这个问题。这是不可能的。但是,您最能做的是将方向设置为“ NOSENSOR”


 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

这将把您的应用程序设置为设备的自然方向。此时,您可以使用DisplayMetrics类获取显示的高度和宽度,并计算您是横向还是纵向。然后确定是横向还是纵向后,即可执行此操作


setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_XXXXX);


其中XXXX是LANDSCAPE或PORTRAIT。


如果您有滑出式键盘,则可能无法执行此操作。


查看完整回答
反对 回复 2019-11-30
  • 3 回答
  • 0 关注
  • 771 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信