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


76

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

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

在网站(HTML / JavaScript / CSS)上同时定位android和ios。还请注意,内部布局为:“ fluid”。

编辑:这是更多的设计,然后是文字;因此,变化不会使人迷惑。在最低级别,我只希望有和没有虚拟键的设计更改(也许只是背景更改)。

这是一个好坏设计思想的问题尚待商bat。但是,我觉得这个问题无关紧要。对于此类攻击,可以使用更多的文字(例如游戏或交互式媒体)。

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

默认行为

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

期望的行为

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

9
为什么?这恼人的有,当你试图输入,但是调整,可以极大可能使其可见但很难或不可能实际阅读的东西消失了。(我不知道iOS是做什么的,但是如果您按这样调整内容的大小,那么在我的Android手机上将很难阅读。)您是否打算同时以纵向和横向进行此操作?顺便说一句,很好的ASCII艺术。
nnnnnn

2
@nnnnnn它的布局很流畅,因此不会调整文本字体的大小(保持不变)...只是我想让两个单独的输入框(顶部和底部)重新定位自身,以便它们都在视图中。但是,无关的中心内容很可能会被“隐藏”。它适用于人像和风景(尽管实际上只有人像才有意义)
PicoCreator 2011年

4
对nnnnn所说的内容+1。您的用户不会期望这种行为,也不会理解。保持原样。
瑞安·希灵顿

@RyanShillington:布局流畅,假设整个区域都是文本,但是可能只是一行文本输入,其余部分是动态背景,对更新后的大小做出反应(而不是溢出到“无处”)
PicoCreator 2012年

1
您可以尝试使用仅在键盘可见时显示的第二种布局
Andreas

Answers:


21

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

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/


1
尝试+1:是的,是键盘处于活动状态时的自定义样式...并且它还提供了有关如何在不使事情变得过于复杂的情况下更改内容的示例,仅调整了图像的大小:没有调整文本的大小...但是它错过了最重要的一点是如何检测活动的本机键盘。>。<(不是自定义的)
PicoCreator 2012年

邓恩担心,它只是网站和设备浏览器...不,它在iOS上不起作用,因为浏览器没有调整大小,整个块都向上移动。虽然这可以防止布局更改,但是可以防止尺寸更改检测...这是个很好的主意= DI真诚地希望它可以工作,并且觉得很有意义。
PicoCreator 2012年

嗯..我没有在iOS上检查过它。它在我的星系S上工作正常。让我们检查一下iOS的所有调整。:)
Praveen Vijayan 2012年

将ios检测混合在一起时,似乎是一个不错的技巧。=)您在探索中的努力得到了赏金。
PicoCreator 2012年

15

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

<!-- 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> 

11
这如何工作?据我了解,meta标签是在文档加载时写入的,这意味着如果用户在页面加载后将焦点放在某个元素上并打开了键盘,就应该发生此问题……。–
Yuki

不是Android的其他设备也可能具有虚拟键盘(因此很有可能),因此该解决方案将不适用于它们,因此,除非保证所有用户都使用该操作系统,否则永远不要使用针对OS的解决方案。
vsync

12

输入元素具有时,让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
+1尽管此解决方案在用户插入外部键盘时会产生假阳性,但它仍然比计算某些元素的高度更好(用户可以旋转手机,拆分屏幕。FFS,甚至台式机用户也可以调整窗口大小)。
卡米尔·本本

还可以在保持文本字段焦点的同时,从屏幕上删除Android(或iOS?)上的虚拟键盘。
矮胖的矮胖

4

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

在为我工作,谢谢
Williaan Lopes

2

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

/* MOBILE KEYBOARD IS OPEN */
@media only screen and (max-width: 430px) and (max-height:400px){
    input:focus{
        position: fixed;
        top:50px;
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.