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

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



千万里不及你
浏览 748回答 3
3回答

UYOU

此方法可以帮助:-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;    }}

泛舟湖上清波郎朗

好吧,您可以找出@Urboss所说的当前方向是什么。您无法以这种方式获取布局(横向/纵向),因此您必须获取屏幕宽度/高度才能检查当前(是否已更改,但您已经检查过;))位置是否为横向。或肖像:    DisplayMetrics dm = new DisplayMetrics();    getWindowManager().getDefaultDisplay().getMetrics(dm);    wPix = dm.widthPixels;    hPix = dm.heightPixels;(因此,如果旋转角度为0,并且您获得的景观水平高于metrix,则您的设备为默认水平景观。如果旋转角度为90度并且您是纵向的,则默认情况下也为水平景观,依此类推)

慕码人2483693

经过数小时的尝试来解决这个问题。这是不可能的。但是,您最能做的是将方向设置为“ NOSENSOR” setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);这将把您的应用程序设置为设备的自然方向。此时,您可以使用DisplayMetrics类获取显示的高度和宽度,并计算您是横向还是纵向。然后确定是横向还是纵向后,即可执行此操作setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_XXXXX);其中XXXX是LANDSCAPE或PORTRAIT。如果您有滑出式键盘,则可能无法执行此操作。
打开App,查看更多内容
随时随地看视频慕课网APP