Android屏幕方向因设备而异

Android屏幕方向因设备而异,第1张

概述描述 我有一个活动,在表面视图上显示相机预览.我不希望它在方向更改时重新启动(因为它不断扫描QR码),因此方向被锁定为纵向. 我遇到的问题是我需要在屏幕底部向用户显示屏幕上的说明.鉴于屏幕被锁定在一个方向,我不会收到新方向的通知,因为活动没有重新绘制.因此,无论手机处于纵向,纵向,横向还是尊重的景观,指令都在同一个地方呈现. 为了解决这个问题,我联系了传感器管理器,实时读取方向. (请参阅下面的代 描述

我有一个活动,在表面视图上显示相机预览.我不希望它在方向更改时重新启动(因为它不断扫描QR码),因此方向被锁定为纵向.

我遇到的问题是我需要在屏幕底部向用户显示屏幕上的说明.鉴于屏幕被锁定在一个方向,我不会收到新方向的通知,因为活动没有重新绘制.因此,无论手机处于纵向,纵向,横向还是尊重的景观,指令都在同一个地方呈现.

为了解决这个问题,我联系了传感器管理器,实时读取方向. (请参阅下面的代码)阅读完之后,我自己制定了方向,并根据需要移动我的说明,因为每次更新都会发送给我.到目前为止,这一直对我有用.在华硕transformer Prime和Xoom平板电脑上进行测试时.平板电脑将方向返回为“90”​​表示纵向,而不是像其他2部手机一样返回“0”.因此,您可以在下面的代码中看到,我检查平板电脑(大屏幕)并减去额外的90度.

问题

问题是新的Nexus 7平板电脑没有这种额外的偏见.在肖像中它返回“0”,但我将其检测为平板电脑,因此减去90度因此结果为270并且它将我的指示放置为平板电脑处于横向模式.我假设背后的原因是Xoom / transformer设计用于横向,Nexus用于纵向,但除非我知道所有受影响的设备,否则无济于事.

是否有一种可靠的方法来检测所有设备的方向并“实时”返回结果,如下面的代码所示,但是考虑到设备的默认方向(即Phones Nexus 7是纵向,但大多数平板电脑是横向的)?

现行守则

boolean large = ((getBaseContext().getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE);    boolean xlarge = ((getBaseContext().getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == 4);           istablet = large || xlarge;    myOrIEntationEventListener = new OrIEntationEventListener(getBaseContext(),SensorManager.SENSOR_DELAY_norMAL)    {        @OverrIDe        public voID onorIEntationChanged(int orIEntation)        {            if (orIEntation == -1)            {                return;            }            if (istablet)            {                orIEntation += -90;                if (orIEntation < 0) // keep the result between 0-360                {                    orIEntation += 360;                }            }            // Work out the orIEntation            if (orIEntation >= 60 && orIEntation <= 140)            {                screenorIEntation = ScreenorIEntation.Landscape_Reversed;            }            else if (orIEntation >= 140 && orIEntation <= 220)            {                screenorIEntation = ScreenorIEntation.Portrait_Reversed;            }            else if (orIEntation >= 220 && orIEntation <= 300)            {                screenorIEntation = ScreenorIEntation.Landscape;            }            else            {                screenorIEntation = ScreenorIEntation.Portrait;            }            //... Do stuff with new orIEntation here        }    };
解决方法 固定它

替换了代码

if (istablet)        {            orIEntation += -90;            if (orIEntation < 0) // keep the result between 0-360            {                orIEntation += 360;            }        }

有以下几点

//Check "normal" screen orIEntation and adjust accordingly            int naturalOrIEntation = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultdisplay().getRotation();            if (naturalOrIEntation == Surface.ROTATION_0)            {                Logging.d(TAG,"Rotation ROTATION_0");            }            else if (naturalOrIEntation == Surface.ROTATION_90)            {                Logging.d(TAG,"Rotation ROTATION_90");                orIEntation += 90;            }            else if (naturalOrIEntation == Surface.ROTATION_180)            {                Logging.d(TAG,"Rotation ROTATION_180");                orIEntation += 180;            }            else if (naturalOrIEntation == Surface.ROTATION_270)            {                Logging.d(TAG,"Rotation ROTATION_270");                orIEntation += 270;            }            if (orIEntation > 360) // Check if we have gone too far forward with rotation adjustment,keep the result between 0-360            {                orIEntation -= 360;            }
总结

以上是内存溢出为你收集整理的Android屏幕方向因设备而异全部内容,希望文章能够帮你解决Android屏幕方向因设备而异所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1130261.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存