使用 Javascript 在 Android 中抑制/检测旋转
Suppress / detect rotation in Android using Javascript
我正在尝试围绕修改后的VNC查看器小程序(VNC =远程显示协议)实现包装器,以提供增强的用户体验(使用javascript),但在处理旋转时遇到了问题。
小程序的宽度/高度是固定的 (1) - 因此当用户旋转设备时,小程序会压低屏幕或调整大小:
+------------+ +-------+ +-------+
|............| |.......|... |.......|
|. X.| |. | X. or |. x.|
|. .| > |. | . |.......|
|............| |.......|... | |
+------------+ | | | |
| | | |
+-------+ :( +-------+ :(
但我要....
+------------+ +-------+
|............| |.......|
|. X.| |. .|
|. .| > |. .|
|............| |. .|
+------------+ |. X.|
|.......|
+-------+ :)
虽然我可以从 javascript 中屏幕尺寸的变化中检测到自动旋转,并且如果它是用 Java 编写的,我可以抑制自动旋转,但这些都没有达到我想要的结果:具体来说,
- 旋转设备时,显示器的方向不会改变
- 我的 JavaScript 会检测到设备已被旋转并重新定向小程序的内容(通过发送 OOB 消息以在 VNCServer 上运行 Xrandr)。
我并不完全反对将旋转检测作为暴露给 javascript 的单独小程序/通过 Web 视图实现页面,但不希望这样做。
是否可以在 html 应用清单文件中锁定方向?
当方向被锁定时,是否可以使用 javascript 检测旋转?
有没有其他方法可以解决这个问题?
1 - 这是底层协议的限制,我已经在对 Java 小程序进行更改,我真的不想重写服务器!
更新
我知道大多数版本的VNC(包括noVNC)都有xrandr的问题。
如果有人可以告诉我如何抑制浏览器页面的自动重新定向(不使用带有 Web 视图的小程序),那至少给了我部分答案。
我不完全确定我是否可能在这里错过了你的观点,但您可以通过在清单中添加以下行来防止设备在旋转或键盘滑出时重新布局:
android:configChanges="keyboardHidden|orientation"
然后,如果我理解正确,您可以在更改发生后让您的 javascript 简单地旋转小程序中的文本。
这将提供将窗口保持在上面指示的方向和大小的预期效果,由您自己来更正文本方向。
看看这个,似乎已经有人解决了这个问题:https://stackoverflow.com/a/2307936/375929
UPD Afaik,你不能从javascript强制执行方向的东西,但你可以检测旋转并在你的web应用程序中通过互补的旋转做出反应 - 所以你的web应用程序的方向对用户来说是一样的。
- 如何检测是否有溢出
- 知道为什么我的旋转木马不会自动更改图片吗
- 如何检测用于WebGL的专用或集成显卡
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 如何在使用selectBoxIt JQuery插件时检测选项更改
- 如何使用密码检测网络中的状态连接
- 使用JavaScript检测Flash
- 在不阻止默认行为的情况下检测IE10中的缩放
- 检测个位数整数时正在转换毫秒
- 检测电话窃听,即:<a href="电话:xxx">在UIWebview上
- 动态插入的表:JQuery未检测到最后一行
- 检测页面上某个元素中选择(突出显示)或单击的内容
- jQuery检测浏览器是否支持Zoom
- 当ons惰性重复检测到更改时,如何使用ons旋转木马刷新列表
- 使用 Javascript 在 Android 中抑制/检测旋转
- 三.js旋转矢量和屏幕边缘检测
- 检测浏览器/设备是否支持屏幕旋转
- 如何检测移动Safari全局方向旋转动画
- HTML5 + JS:可旋转字符的碰撞检测
- 检测鼠标滚轮旋转的次数,而不是旋转的长度