Kindle Fire在某些时候改变屏幕分辨率……

免责声明 :这是一个奇怪的问题,只发生在Kindle Fire(到目前为止)。

涉及的技术:Android SDK,Eclipse, LibGDX 。

我有一个与LibGDX一起运行的相对简单的应用程序。 LibGDX的工作方式是通过一个OpenGL线程调用Create()(一次),然后尽可能多地调用Render()(这样你就可以进行渲染……)。

因此,当您初始化Device时,会调用“Create()”方法,然后在初始化OpenGL表面时(所有这些都自动发生),您的Render()开始被调用。

如果OpenGL上下文丢失,被破坏等,则LibGDX会调用Resize(width,height)方法。

至今。 太好了。

现在我遇到了一个Kindle Fire的奇怪问题,其中的东西看起来像几个像素或“切”。 Kindle Fire在屏幕底部有一个“软键”(20像素),你无法隐藏或跳过,这是“好的”,因为该设备没有物理按钮。 你应该触摸这个软条,并获得一个更大的酒吧回去,回家等。根据亚马逊,这个酒吧无法删除。 (并非100%明确,但没有人find方法 – 这不违反亚马逊规则)。 我见过的唯一的应用程序删除了亚马逊video播放器,仅适用于从亚马逊云端流式传输的video 。 正如你所看到的,似乎没有办法“永久地”隐藏那个栏。

因此,如果条形图存在,则您的实际屏幕状态不是硬件分辨率1024×600(横向),而是1024×580。 所以我在我的方法中添加了一些日志来查看发生了什么,并对此感到惊讶……(记住create(),render()和resize()方法):

12-23 15:17:04.119: I/myapp(19921): SCREEN HEIGHT AT CREATE(): 600 [snip other unrelated log stuff] 12-23 15:17:04.673: I/myapp(19921): SCREEN HEIGHT AT RENDER() LOOP: 600 [snip other unrelated log stuff] 12-23 15:17:04.705: I/myapp(19921): MyApp - Resize() Called. 12-23 15:17:04.705: I/myapp(19921): SCREEN HEIGHT AT RENDER() LOOP: 580 

因此屏幕已被K​​indle Fire“resize”,“在某些时候”。

有没有人遇到这样的事情?

这是一个截图(注意顶部的黑条,这不是我添加的!)。 请原谅我模糊图像,但这是一个客户的项目,我不能“透露”任何东西。

在此处输入图像描述

有趣的部分开始有时 ,酒吧不会在那里,应用程序将看起来像下一个(再次,模糊的sry)。 请注意顶部栏不在那里……

在此处输入图像描述

仔细检查两个镜头后,您可以确定底部(应该是相同的)不是。 那种有点奇怪的事情。

有任何想法吗?

资产最初打包为1024×600,但我们已经改变了(现在是580)并且假设视口现在是1024×580,但我想知道是否有人find了更好的方法来处理这个废话? 🙂

注意 :我们在清单中有android:theme =“@ android:style / Theme.NoTitleBar.Fullscreen”。 什么都不做。

提前致谢。

Kindle fire有一个奇怪的行为,一旦应用程序加载似乎它“移动”屏幕20px向上(软键高度)因此你的应用程序看起来几个像素关闭或削减。 那是因为当您创建GLSurfaceView并设置渲染器时,它会调用onSurfaceChanged方法两次。

第一次调用onSurfaceCreated后,分辨率值为1024×600,第一次调用onDrawFrame后,第二次调用值为1024×580。

解决方案是,您必须控制对onSurfaceChanged的两次调用并调整opengl视口的大小。

  private static boolean appStarted = false; ... private static class Renderer implements GLSurfaceView.Renderer { public void onSurfaceChanged(GL10 gl, int width, int height) { if ( !appStarted ) { //Initialization (Resolution 1024x600) } else { //Second call, screen resolution changed (Resolution 1024x580) //Resize(width,height) } appStarted = true; } public void onDrawFrame(GL10 gl) { //Render() } public void onSurfaceCreated(GL10 gl, EGLConfig config) { //Create() } } 

试试这个:

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

资料来源: https : //developer.amazon.com/help/faq.html?ref_ = pe_132830_21362890#KindleFire

我最近遇到了这个问题,并想知道你是否已经find了解决方案。

出现黑条,因为您的应用报告高度为580像素高。 OpenGL有一个坐标系,其中(0,0)位于屏幕的左下角。

出于某种原因,Kindle的软条没有将EGLSurface向上移动20个像素。 然而,resize会将大小减小20px,留下黑条。 所以问题是EGLSurface的位置。 似乎有时,由于时间安排,resize后重新定位(使黑条消失)。