Android中虚拟导航条隐藏之后的屏幕适配问题

   大家都知道,Android 4.0之后虚拟导航键正在成为主流,部分厂商的定制ROM中还提供了显示/隐藏虚拟导航条的功能。小弟在开发过程中遇到了一个问题,那就是虚拟导航在显示/隐藏两种状态下,画面会随着导航条的位置而上下偏移, 而且如果设置了相应触摸事件,触摸点的判断还是在原来的位置,但是画面却已经变了。 一开始我以为是自己的项目中分辨率设置的代码没写好,但是发现未经修改过的项目也会出现这种现象。以HelloWorld为例:

   ROM为华为P6自带,可显示/隐藏虚拟导航。


   注意两张图片中 "HelloWorld" 与屏幕上方的距离随着虚拟导航的状态而上下移动。


   这个问题很是让人困扰,小弟尝试了各种解决方法,例如动态改变DesignedResolution, 配合各种适配方案, 但始终无法解决这个问题,google也找不到解决方法。特来求教各位大神。希望大家帮帮忙,不吝赐教,小弟先行谢过了!

PS: 横屏貌似不会出现这样的问题,竖屏才会

额,没人知道吗?

你试试在定位的时候用origin.x + visibleSize.width/2, origin.y + visibleSize.height/2 这样,
获取触摸点也这样 试试!

感谢回复。但是目前来看这个位置的偏移是整个绘图坐标系的偏移,包括原点, 都会随着虚拟导航栏的显示或隐藏而改变。 也就是说,当导航栏出现时,整个绘图的坐标系,其原点是在导航栏的左上角,导航栏隐藏时,原点是在屏幕的左下角部。奇怪的是,触摸点的坐标系是不变的,其原点取决于进入游戏时虚拟导航栏的状态。因此根据origin 和visibleSize来布局的方法是无效的, 何况, hello world 也是用的这种方法呀, 但是具体情况,你也看见了…(见上图):12:

比较蛋疼,让版主来看看吧!

帮顶~:2:

   提问之后,我在网上找到了一个勉强能解决问题的方法,来自 http://discuss.cocos2d-x.org/t/how-to-set-full-screen-on-android-4-4/10278。简要说明下,就是在activity层面上设置系统标志位,使其强制性的全屏,这样就不会出现navigation bar,那么画面的偏移自然是无从说起,如果你手动把navigation bar调出来(在某些机型可以手动显示/隐藏),它会覆盖画面最下方的一部分。这样也算是变相解决了问题。
   但是我觉得这是个指标不治本的办法,直接绕过了偏移的问题。目前有空闲,我决定继续找找如何从cocos2dx引擎的层面上解决这个问题,希望大家知道方法的能告知一二,谢谢大家了!

该问题已解决,下次有空时补上解决方法

我也碰到同样问题,顶一下,等楼主放出解决方法。

测试了 http://discuss.cocos2d-x.org/t/how-to-set-full-screen-on-android-4-4/10278的解决方法,在华为的平板上直接崩了(android版本4.2)。期待楼主的解决方案。

咋解决的?还没空吗?:)

— Begin quote from ____

引用第9楼magicace于2014-10-22 17:13发表的 :
测试了 http://discuss.cocos2d-x.org/t/how-to-set-full-screen-on-android-4-4/10278的解决方法,在华为的平板上直接崩了(android版本4.2)。期待楼主的解决方案。 http://www.cocoachina.com/bbs/job.php?action=topost&tid=224081&pid=1080897

— End quote

这个帖子里使用的api只能在4.4以上版本android里使用。

同问,有人知道怎么解决么?

怎么解决的,能不能放出来给大家一些帮助

楼主啊,快出来,勤奋点,
网上这方面的资料不好找啊,跪求指导

2.x版本中,在cocos2dxrender.java中,在onSurfaceChanged方法中重新适配一遍就行了

怎么做呢,如果重新适配一遍,宽高变了,是不是需要重新计算一遍坐标

楼主解决了吗?方法是什么啊?

在Cocos2dxActivity中的onCreate、onResume、onWindowFocusChanged方法中,根据当前的Build.VERSION.SDK_INT增加了setSystemUiVisibility的控制
在Nexus 7中测试ok,目前没有其他机子测试
上面解决方法的原理只是在导航和虚拟按键弹出时不移动UI,但是有些机型的虚拟按键是不能隐藏的,应该还是有覆盖或者移动游戏UI
所以上面的方法应该只是解决部分机型的问题

楼主死去哪里了?还不回来:6: