Android 手机下输入框获取焦点时, 输入法挡住输入框的 bug

DOM的滚动

DOM规范中并没有规定各浏览器需要实现怎样的滚动页面区域,各浏览器实现了相应的方法,可以使用不同的方式控制页面区域的滚动。这些方法作为HTMLElement类型的扩展存在,所以它能在所有元素上使用。

1、scrollIntoView(alignWithTop)  滚动浏览器窗口或容器元素,以便在当前视窗的可见范围看见当前元素。如果alignWithTop为true,或者省略它,窗口会尽可能滚动到自身顶部与元素顶部平齐。-------目前各浏览器均支持

2、scrollIntoViewIfNeeded(alignCenter) 只在当前元素在视窗的可见范围内不可见的情况下,才滚动浏览器窗口或容器元素,最终让当前元素可见。如果当前元素在视窗中可见,这个方法不做任何处理。如果将可选参数alignCenter设置为true,则表示尽量将元素显示在视窗中部(垂直方向)------Safari、Chrome实现了这个方法

3、scrollByLines(lineCount) 将元素的内容滚动指定的行数的高度,lineCount的值可以为正值或是负值。---Safari、Chrome实现了这个方法

4、scrollByPages(pageCount) 将元素的内容滚动指定的页面的高度,具体高度由元素的高度决定。---Safari、Chrome实现了这个方法

scrollIntoView()和scrollIntoVIewIfNeeded()作用的是元素的窗口,而scrollByLines()、scrollByPages()影响元素自身,下面是几个示例:

//将页面主体滚动5行

document.body.scrollByLines(5);

//确保当前元素可见

document.getElementById(“test”).scrollIntoView();   //

//true:对象的顶端与当前窗口的顶部对齐

//false:对象的底端与当前窗口的顶部对齐

//确保只在当前元素不可见的情况下才使其可见

document.getElementById(“test”).scrollIntoViewIfNeeded();

//将页面主体往回滚1页

doument.body.scrollByPages(-1);

由于只有scrollIntoView被各浏览器均支持,所以这个方法最为常用

function androidInputBugFix(){
  //  Android 手机下输入框获取焦点时, 输入法挡住输入框的 bug
  // 相关 issue: https://github.com/weui/weui/issues/15
  // 解决方法:
  //  参考 http://stackoverflow.com/questions/23757345/android-does-not-correctly-scroll-on-input-focus-if-not-body-element
  // Android 手机下, input 或 textarea 元素聚焦时, 主动滚一把
  if (/Android/gi.test(navigator.userAgent)) {
    window.addEventListener(‘resize‘, function () {
      if (document.activeElement.tagName == ‘INPUT‘ || document.activeElement.tagName == ‘TEXTAREA‘) {
        window.setTimeout(function () {
        document.activeElement.scrollIntoViewIfNeeded();
      }, 0);
    }})
  }
}

原文地址:https://www.cnblogs.com/xuLessReigns/p/11125630.html

时间: 2024-10-19 14:40:30

Android 手机下输入框获取焦点时, 输入法挡住输入框的 bug的相关文章

Android 中解决输入法挡住输入框的问题

android 中解决输入法挡住输入框的问题 大家在布局时候,有时候会发现输入框被挡住一部分,能完全显示出来,但是系统自带短信界面可以完全漂浮在软键盘之上,看了一下短信源码,修改一下输入模式就可以了,源码如下代码方式: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); 也可以简

解决移动端输入法挡住输入框的办法

做过hybrid app的朋友都会使用这样过这样的开发模式,app是原生的,里面的内容是移动web.以安卓为例,安卓app里面内容会使用一个webview控件来加载移动web,webview控件设置了全屏.那么问题来了,假如是一个表单页面,里面有很多的输入框,点击最顶部的输入框的时候,移动端的输入法就会挡住最底部的输入框,无法看到输入框里面的内容. 如何解决,请看一下代码: <!DOCTYPE html> <html> <head> <meta charset=&

android手机上安装apk时出现解析包错误的一个解决办法

今天下午在学习安卓开发时,学习开发文档中的gridview时,在模拟器上调试程序一切正常,如下图所示: 但当将bin目录下的HelloGridView.apk拷贝到M8安卓系统后进行安装时,出现了“解析包错误”的提示,在网上搜索答案未果后,经过和以前的例子相对比,发现了我在创建android工程时,由于使用的SDK为2.3.3版本,所以选择的minSdkVersion="10",而m8的android版本为2.2.所以试着将AndroidManifest.xml中的minSdkVers

[android] 手机卫士保存密码时进行md5加密

一般的手机没有root权限,进不去data/data目录,当手机刷机了后,拥有root权限,就可以进入data/data目录,查看我们保存的密码文件,因此我们需要对存入的密码进行MD5加密 获取MessageDigest信息摘要器对象,调用MessageDigest.getInstance(“md5”),参数:规则 调用MessageDigest对象的digest(bytes)方法,得到加密的byte[] 数组,参数:byte[] 数组,调用String对象的getBytes()方法获取到字节数

解决安卓在已经获取焦点时输入法不弹出来的方法

public void showIMM(final View v){ Timer timer = new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { InputMethodManager m = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); m.toggleSoftInput(0

Android - 手机开发调试无法输出logcat信息 - 未解决

参考链接:Android手机在开发调试时logcat不显示输出信息的解决办法 Android:真机调试,不显示logcat的解决规划 Coolpad 8730L 进入手机工厂模式: Dial:   *#9527*# android 手机获取root 打开USB调试选项,使用一键root工具,e.g:客户端 KingRoot 设置logcat level: 出现如下结果1,断开其他android设备或者模拟器,保持一个手机与电脑连接:2,手机rom需要获取root权限 adb shell su P

IOS 固定定位底部input输入框,获取焦点时弹出的输入法键盘挡住input

移动页面经常会做到这样一个效果,看下面的图片,重点就是那个固定定位的底部,里面有个input输入框,在输入字符的时候,安卓手机看着是完全没有问题! 1.页面没有点击底部input的初始状态 2.安卓手机下的样子,一切都是那么的正常,简直是完美. 3.ios手机下,就是这么任性,没有办法,完全挡着了,挡着了,挡着了...,必须把整个页面滑到最底下才能看见它,捉迷藏啊简直是. 不怕丢人的说,此问题遇见一年多了终于得到完美解决,更加精彩.更加狗血的是代码只有特么的一行! 请睁大眼睛看 <script

Android爬坑之旅:软键盘挡住输入框问题的终极解决方案

前言 开发做得久了,总免不了会遇到各种坑.而在Android开发的路上,『软键盘挡住了输入框』这个坑,可谓是一个旷日持久的巨坑--来来来,我们慢慢看. 入门篇 Base 最基本的情况,如图所示:在页面底部有一个EditText,如果不做任何处理,那么在软键盘弹出的时候,就有可能会挡住EditText.对于这种情况的处理其实很简单,只需要在AndroidManifest文件中对activity设置:android:windowSoftInputMode的值adjustPan或者adjustResi

[Cordova/Phonegap] Cordova iOS 应用在第三方输入法的键盘弹出(点击输入框)时,页面不上移,导致输入框被键盘遮挡 的解决办法

http://blog.csdn.net/lovelyelfpop/article/details/52033045 Cordova iOS应用在使用系统自带输入法键盘的时候,聚焦文本框是会将整体webview界面上移的,如下图: 然而,如果你用的是第三方输入法(百度.搜狗.qq输入法等都是),聚焦文本框弹出键盘时,界面却不会整体上移,导致文本框被软键盘遮挡,如下图: 不仅被遮挡,靠底部的文本框还无法往上拖拽滚至可视区域. 解决办法一:第三方键盘弹出,实现界面也能上移 使用 ionic-plug