虚拟键盘处于活动状态时的屏幕样式

IT技术 javascript android css ios mobile
2021-02-21 17:22:03

理想情况下,我希望整个界面都有一个自定义样式,可以在 ios (itouch / ipad) 或 android 等价物上看到,并带有虚拟键盘。请参阅下面的更多细节。

当键盘“存在”时,自定义设置的 CSS hacking 规则处于活动状态也是一种可接受的解决方案。

在网站(HTML/JavaScript/CSS)上同时针对 androids 和 ios 还要注意里面的布局是:“fluid”。

编辑:这是更多的设计,然后是文字;所以这些变化并没有让人迷失方向。在最低级别,我只希望使用和不使用虚拟键进行设计更改(也许只是背景更改)。

关于这是一个好还是坏的设计理念的问题是有争议的。不过,我觉得这个问题无关紧要。对于这样的漏洞利用可以使用更多的文本(例如游戏或交互式媒体)。

因此,赏金:尽管不再需要我正在从事的项目的答案(使用了替代设计)。我仍然相信这个问题可以从回答中受益。

默认行为

                       +--------+ 
                       |        |
+------------+       +-+-hidden-+-+   <- ~50% hidden
| +--------+ |       | +--------+ |
| |        | |       | |visible | |
| |        | |   \   | |        | |   <- ~50% visible
| |  100%  | |  ==>  | +--------+ |
| |        | |   /   | |virtual | |
| |        | |       | |  keys  | |
| +--------+ |       | +--------+ |
+------------+       +------------+

期望的行为

+------------+       +------------+   
| +--------+ |       | +--------+ |
| |        | |       | |visible | |   <- 100% visible (example styling)
| |        | |   \   | |        | |      Custom Styling
| |  100%  | |  ==>  | +--------+ |
| |        | |   /   | |virtual | |
| |        | |       | |  keys  | |
| +--------+ |       | +--------+ |
+------------+       +------------+
6个回答

我不确定,这是想要的效果吗?检查此链接

http://jsfiddle.net/UHdCw/3/

更新

(1). 假设它是一个网站并在设备浏览器上运行。然后我们可以通过检查屏幕大小来检查虚拟键盘的存在。

签入设备浏览器 - http://jsfiddle.net/UHdCw/8/show/

代码:- http://jsfiddle.net/UHdCw/8/

(2). 如果您使用 HTML5 和 Phonegap 构建本机应用程序,情况会有所不同。由于没有直接的 API 钩子来检查键盘状态,我们必须在 Phonegap 中编写我们自己的插件

在 Android 中,您可以使用本机代码 [检查此处] 来检查键盘的显示/隐藏状态并且必须编写 Phonegap 插件才能在我们的 HTML 中获取这些事件。

[Phonegap 就是一个例子。我认为大多数 html 到本机框架都有这种与本机代码挂钩的便利]

iOS更新

正如您所说,当键盘存在时,高度/位置没有变化。我们可以做一件事,当输入获得焦点时,我们可以添加收缩类并减小元素大小。检查以下链接。

http://jsfiddle.net/UHdCw/28/show/

嗯.. 我没有在 iOS 上检查过。它在我的星系 S 中运行良好。让我们检查一下 iOS 的任何调整。:)
2021-04-25 17:22:03
+1 尝试:是的,键盘处于活动状态时的自定义样式......它也是一个关于如何改变内容而不会使事情变得太复杂的例子,只有图像调整大小:不是文本......但是它错过了最重要的一点,如何检测活动的原生键盘。>.<(不是自定义的)
2021-04-27 17:22:03
不用担心,它只是网站和设备浏览器……不,它在 iOS 上不起作用,因为浏览器没有调整大小,整个块都向上移动。虽然这可以防止布局更改,但它可以防止大小更改检测......这是一个很好的主意 =DI 老实说希望它会起作用,并且觉得它是有道理的。
2021-04-28 17:22:03
当将 ios 检测混合在一起时,这似乎是一个足够好的黑客。=) 你在探索中的努力得到了赏金。
2021-05-10 17:22:03

我遇到了同样的问题,这对我有用:

<!-- Android Viewport height fix-->
<script type="text/javascript">
var isAndroid = navigator.userAgent.toLowerCase().indexOf("android") > -1; //&& ua.indexOf("mobile");
if(isAndroid) {
    document.write('<meta name="viewport" content="width=device-width,height='+window.innerHeight+', initial-scale=1.0">');
}
</script> 
这如何工作?如果我理解,元标记是在文档加载时写入的,这意味着如果用户聚焦一个元素并在页面加载后打开键盘 - 应该会发生问题......
2021-04-28 17:22:03
其他Android设备也可能具有虚拟键盘(最有可能),因此该解决方案对它们不起作用,因此,除非保证所有用户都使用该操作系统,否则不应使用特定于操作系统的解决方案
2021-05-06 17:22:03

的JavaScript应用类的身体当输入元件focus

$("input, textarea").focus(function(){  $(document.body).addClass('when-keyboard-showing');     });
$("input, textarea").blur( function(){  $(document.body).removeClass('when-keyboard-showing');  });

然后使用@media查询来确定是否移动视图:

@media (max-width:550px) { 
    body.when-keyboard-showing .header { height:0; padding:0; }
}

当键盘打开时,该组合可让您在移动设备上对页面进行风格化。谢谢你。

+1 虽然这个解决方案在用户插入外部键盘时会产生误报,但它仍然比计算某些元素的高度要好得多(用户可以旋转他的手机,拆分他的屏幕。FFS,甚至桌面用户可以调整他的窗口大小)。
2021-04-23 17:22:03
也可以从屏幕上移除 Android 上的虚拟键盘(也许也在 iOS 上?)同时保持文本字段的焦点。
2021-05-12 17:22:03

我有同样的问题。到目前为止,这是我的解决方案,如果有人可以在 Apple 上进行测试,我将不胜感激:http : //jsfiddle.net/mrcchehab/f2ytsu8z/show(查看源代码和所有内容:http : //jsfiddle.net/marchehab/f2ytsu8z )

通过以下方式检测键盘是否关闭:加载时我计算一个变量“sumedges”,即 $(window).width() + $(window).height()。然后,在 $(window).resize() 的情况下,我比较:如果总和 $(window).width() + $(window).height() 变得小于“sumedges”,这意味着键盘是出去。这适用于 Android 上的 Chrome。您可以轻松调整此代码以执行任何您喜欢的操作。

var sumedges = $(window).width() + $(window).height();
$(window).resize(function(){
    if($(window).width() + $(window).height() < sumedges) {
    $("#display").html("keyboard out");
  } else {
    $("#display").html("keyboard in");
  }
});

使用 jQuery,我发现无法在您单击输入并弹出键盘时强制平滑过渡。有可能欺骗系统:在小提琴中,我设置了一个假输入(蓝色)。当您单击它时,实际输入出现在我的显示(黄色)下方并被选中。这样,在 Android 上的 Chrome 上,这一切看起来都很顺利。再次,如果你们能测试,我将不胜感激。

$("#fakeinput").click(function(){
    $("#realinput").show().children("input").focus();
  $("html,body").scrollTop($("#display").offset().top);
});

$("#realinput input").blur(function(){
    $("#realinput").hide();
});

当键盘打开时,我使用一个简单的 CSS 媒体查询将活动输入移动到手机屏幕的顶部。像这样的准系统示例:

/* MOBILE KEYBOARD IS OPEN */
@media only screen and (max-width: 430px) and (max-height:400px){
    input:focus{
        position: fixed;
        top:50px;
    }
}