精华内容
下载资源
问答
  • 1.键盘弹出时屏幕可以滑动 在布局里面添加 android:fitsSystemWindows="true" 2.键盘弹出时把所有内容顶上去 (1).首先一个工具类: public class KeyboardLayout extends FrameLayout { private ...

    1.键盘弹出时屏幕可以滑动
    在布局里面添加

    android:fitsSystemWindows="true"
    

    2.键盘弹出时把所有内容顶上去
    (1).首先一个工具类:

    public class KeyboardLayout extends FrameLayout {
    
        private KeyboardLayoutListener mListener;
        private boolean mIsKeyboardActive = false; //输入法是否激活
        private int mKeyboardHeight = 0; // 输入法高度
    
        public KeyboardLayout(Context context) {
            this(context, null, 0);
        }
    
        public KeyboardLayout(Context context, AttributeSet attrs) {
            this(context, attrs, 0);
        }
    
        public KeyboardLayout(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            // 监听布局变化
            getViewTreeObserver().addOnGlobalLayoutListener(new KeyboardOnGlobalChangeListener());
        }
    
        public void setKeyboardListener(KeyboardLayoutListener listener) {
            mListener = listener;
        }
    
        public KeyboardLayoutListener getKeyboardListener() {
            return mListener;
        }
    
        public boolean isKeyboardActive() {
            return mIsKeyboardActive;
        }
    
        /**
         * 获取输入法高度
         *
         * @return
         */
        public int getKeyboardHeight() {
            return mKeyboardHeight;
        }
    
        public interface KeyboardLayoutListener {
            /**
             * @param isActive       输入法是否激活
             * @param keyboardHeight 输入法面板高度
             */
            void onKeyboardStateChanged(boolean isActive, int keyboardHeight);
        }
    
        private class KeyboardOnGlobalChangeListener implements ViewTreeObserver.OnGlobalLayoutListener {
            int mScreenHeight = 0;
            private int getScreenHeight() {
                if (mScreenHeight > 0) {
                    return mScreenHeight;
                }
                mScreenHeight = ((WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE))
                        .getDefaultDisplay().getHeight();
                return mScreenHeight;
            }
    
            @Override
            public void onGlobalLayout() {
                Rect rect = new Rect();
                // 获取当前页面窗口的显示范围
                ((Activity) getContext()).getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
                int screenHeight = getScreenHeight();
                int keyboardHeight = screenHeight - rect.bottom; // 输入法的高度
                boolean isActive = false;
                if (Math.abs(keyboardHeight) > screenHeight / 4) {
                    isActive = true; // 超过屏幕五分之一则表示弹出了输入法
                    mKeyboardHeight = keyboardHeight;
                }
                mIsKeyboardActive = isActive;
                if (mListener != null) {
                    mListener.onKeyboardStateChanged(isActive, keyboardHeight);
                }
            }
        }
    }
    
    

    (2).在布局最外层引用这个控件,并设置id

    <com.lmc.cityrabbit.utils.KeyboardLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/keyboard"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".view.activity.ContractContentActivity">
    

    (3).清单文件对应Activity添加

    <activity android:name=".view.activity.RentActivity"
                android:windowSoftInputMode="adjustResize"
                />
    

    (4).Activity里面

    keyboard.setKeyboardListener((isActive, keyboardHeight) -> {
                if (isActive) {
                    scrollToBottom();
                }
            });
    
    private void scrollToBottom() {
            scroll.postDelayed(new Runnable() {
                @Override
                public void run() {
                    scroll.smoothScrollTo(0, scroll.getBottom());
                }
            }, 100);
        }
    

    3.最外层布局使用ScrollView(还未尝试此方法)

    展开全文
  • ios 键盘弹出input输入框被遮挡 键盘隐藏时页面无法回弹解决方案 问题:测试发现ios微信端浏览器中,键盘弹出后,输入框被软键盘遮挡,input失焦后,因软键盘顶起的页面没有回弹到原来位置,需手动滑动一下页面才...

    ios 微信键盘弹出input输入框被遮挡 键盘隐藏时页面无法回弹解决方案


    问题:测试发现ios微信端浏览器中,键盘弹出后,输入框被软键盘遮挡,input失焦后,因软键盘顶起的页面没有回弹到原来位置,需手动滑动一下页面才可以恢复;android端没有发现这个问题

    原因:ios对fixed支持并不是很好,ios12+,微信6.7.4版本存在bug,键盘收回时,界面没有恢复,底下出现空白区域,并导致光标位置错乱,再次点击输入框区域时无法focus

    解决方法:监听键盘事件,页面自动滚动到原来位置

    直接上代码,直奔主题

     // 软键盘弹起时,解决输入框被遮挡
        document.body.addEventListener('focusin', (e) =>{
            var timer1 = setInterval(function() {
                document.body.scrollTop = document.body.scrollHeight;
                clearInterval(timer1);
            }, 100)
        })
    
        // 软键盘消失后,解决页面无法回弹
        document.body.addEventListener('focusout', (e) =>{
            var ua = navigator.userAgent.toLowerCase();
            if(/micromessenger/.test(ua)) {
                if(/iphone|ipad|ipod/.test(ua)) {
                    var currentPosition, timer2;
                    var speed = 1;
                    timer2 = setInterval(function() {
                        currentPosition=document.documentElement.scrollTop || document.body.scrollTop;
                        currentPosition-=speed;
                        window.scrollTo(0,currentPosition);
                        currentPosition+=speed;
                        window.scrollTo(0,currentPosition);
                        clearInterval(timer2);
                    }, 1);
                }
            }
        })
    
    

    亲测,苹果x,ios12,完美解决问题,欢迎讨论留言!

    展开全文
  • app 输入框获得焦点后软键盘弹出输入框下方的控件会遮挡输入框,导致无法输入。 1、正常状态: 2、备注单号输入框获得焦点: 这时备注单号下方的“新建“按钮挡住了一部分 解决方案: 在...

    问题:

    app 输入框获得焦点后软键盘弹出时输入框下方的控件会遮挡输入框,导致无法输入。

    1、正常状态:

    2、备注单号输入框获得焦点:

    这时备注单号被下方的“新建“按钮挡住了一部分

     

    解决方案:

    在AndroidManifest.xml中的当前activity中添加android:windowSoftInputMode="adjustPan"属性

    该属性的意思是:

    1、如果输入框高度比软键盘底,获取焦点后界面整体往上推,保证输入框不被软键盘遮盖

    2、如果输入框高度比软键盘高,获取焦点后输入框下方的控件也不会单独往上推

    该例中输入框高度比软键盘高

     

    效果:

    软键盘弹出下方控件没有向单独往上推

    至此问题解决!

     

     

     

    展开全文
  • 问题:输入框被键盘遮挡 期望效果:输入框位于键盘上方 解决思路: 监听键盘出现和消失的状态,当键盘出现时,当前视图上移,当输入完成收起键盘时,视图回到初始状态。...///键盘弹出 处理遮挡问题

    问题:输入框被键盘遮挡

    期望效果:输入框位于键盘上方
    在这里插入图片描述
    解决思路:
    监听键盘出现和消失的状态,当键盘出现时,当前视图上移,当输入完成收起键盘时,视图回到初始状态。

    难点:视图向上平移的距离
    在这里插入图片描述
    原理都差不多,oc版参考代码:

    	self.phoneInput = [UITextField new];
        self.phoneInput.placeholder = @"请输入...";
        [self.view addSubview:self.phoneInput];
    
    
    ///键盘弹出 处理遮挡问题
    - (void)viewWillAppear:(BOOL)animated
    {
        [super viewWillAppear:animated];
        
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillShow:)
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillHide:)
                                                     name:UIKeyboardWillHideNotification
                                                   object:nil];
    }
    - (void)keyboardWillShow:(NSNotification *)notification
    {
      //获取处于焦点中的view
      NSArray *textFields = @[self.phoneInput];
      UIView *focusView = nil;
      for (UITextField *view in textFields) {
        if ([view isFirstResponder]) {
          focusView = view;
          break;
        }
      }
      if (focusView) {
         //获取键盘弹出的时间
         double duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
         //获取键盘上端Y坐标
         CGFloat keyboardY = [notification.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;
         //获取输入框下端相对于window的Y坐标
         CGRect rect = [focusView convertRect:focusView.bounds toView:[[[UIApplication sharedApplication] delegate] window]];
         CGPoint tmp = rect.origin;
         CGFloat inputBoxY = tmp.y + focusView.frame.size.height;
         //计算二者差值
         CGFloat ty = keyboardY- inputBoxY;
         NSLog(@"position keyboard: %f, inputbox: %f, ty: %f", keyboardY, inputBoxY, ty);
         //差值小于0,做平移变换
         [UIView animateWithDuration:duration animations:^{
           if (ty < 0) {
              self.view.transform = CGAffineTransformMakeTranslation(0, ty);
           }
         }];
       }
    }
    
    - (void)keyboardWillHide:(NSNotification *)notification
    {
      //获取键盘弹出的时间
      double duration = [notification.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
      //还原
      [UIView animateWithDuration:duration animations:^{
         self.view.transform = CGAffineTransformMakeTranslation(0, 0);
      }];
    }
    ///<UITextFieldDelegate>
    ///UITextFieldDelegate编辑完成,视图恢复原状
    -(void)textFieldDidEndEditing:(UITextField *)textField
    {
         self.view.frame =CGRectMake(0, 0,  [[UIScreen mainScreen] bounds].size.width,[[UIScreen mainScreen] bounds].size.height);
    }
    
    展开全文
  • 底部输入框部分用position:absolute定位,当键盘弹出时,页面整体挤压; 解决方法 页面加载后获取视图高度为height, 监听window.onresize,指定容器高度为height 存在的问题: 偶尔会出现input框获取焦点后,...
  • H5移动端弹出键盘遮挡输入框 2017年08月03日 11:00:03 风中乘凉 阅读数:11836 在写移动端时,如果使用绝对定位Fixed将输入框(input或者textarea),当手机的输入法为自带输入法时可能问题不大,但是当使用...
  • XXX.JS 用于解决小键盘导致输入框被挡住... // 延时执行,等键盘弹出界面页面resize完成 setTimeout(() => { let { top: elTop, height: elHeight } = this.getBoundingClientRect(); let innerH = window.inne
  • 在项目中使用到全屏的PopupWindow,底部有一个EditText,在软键盘弹出的时候输入框被遮挡,记录一下我解决这个问题的整个过程: 第一时间就想到了去看看AndroidManifest中对应的Activity看看有没有...
  • 容器高度变了,而容器content的scrollTop没变化,表现为原再视图底部的界面隐藏了,看起来就像是软键盘把它挡住了。 解决方法: 给滚动区域的每一个input标签添加focus监听事件,用以记录当前所操作的input元素。...
  • vue项目中,点击输入框的时候,弹出键盘挡住了输入框,需要把输入框展示在可见区域中,不被遮挡 项目中,点击输入框的时候,弹出来的键盘挡住了输入框,输入框不在可视区域里面,主要解决代码,加个监听来看是否点击了...
  • Cordova iOS应用在使用系统自带输入法键盘的时候,聚焦文本框是会将整体webview界面上移的,如下图: 然而,如果你用的是第三方输入法(百度、搜狗、qq输入法等都...解决办法一:第三方键盘弹出,实现界面也能上移
  • 在h5页面中,当输入框在最底部,点击软键盘会出现输入框被遮挡问题,或者是底部有一个固定定位的导航,然而每次一点击输入框弹出输入法的时候,这个底部的导航会随着输入法被顶上去问题。 解决办法:由于弹起...
  • Flutter - 5 : 键盘遮挡输入框问题,以及阻止系统键盘弹出 Flutter中的输入框控件TextField竟然在键盘遮挡的时候没有上移的行为,真是坑爹。 中间参考过某位大神的解决办法,然而没成功,可能是我看的不够仔细,...
  • * 解决在页面底部置输入框,输入法弹出遮挡部分输入框的问题 * @param root 页面根元素 * @param editText 键盘遮挡输入框 */ public static void controlKeyboardLayout(final View root, final ...
  • 项目中,点击输入框的时候,出来的键盘挡住了输入框,输入框不在可视区域里面,主要解决代码,加个监听来看是否点击了输入框,滚动到可视区域 Element.scrollIntoView()方法让当前的元素滚动到浏览器窗口的可视区域内。...
  • Activity的底部放置EditText的时候,输入法的弹出可能会遮挡住界面 通过设置相应的softInputMode就可以解决这个问题 <activity android:name=".TestActivity" android:windowSoftInputMode="stateVisible|...
  • 在安卓上面,点击页面底部的输入框,软键盘弹出,页面移动上移。而ios上面,点击页面底部输入框,软键盘弹出输入框看不到了。。。非常蛋疼。查资料说什么的都有,iscroll,jquery-moblie,absolute,fixe,static,...
  • 介绍EditText和AutoCompleteTextView初始不获得焦点及解决键盘弹出遮挡输入框问题。 1、activity启动时EditText不获得焦点 Activity启动时若有一个EditText默认,EditText获得焦点,去掉首次焦点,在manifest....
  • 解决:利用scrollView,在键盘弹出时获取其高度,动态改变scrollview.contentSize区域不键盘遮挡import Foundation import UIKitclass TestView : UIViewController,UITextFieldDelegate,UITextViewDelegate
  • 当在Android的layout设计里面如果输入框过多,则在输入弹出键盘的时候,下面的输入框会有一部分软件盘挡住,从而不能获取焦点输入。 解决办法: 方法一:在你的activity中的oncreate中setContentView之前写上...
  • 项目过程中遇到一个奇怪的bug,第一次点击Edittext时键盘正常弹出无遮挡,第二次点击时输入框被遮挡。经过排查最终找到问题在于同时设置了inputType和gravity或者同时设置singleLine和gravity。 解决办法一:(不...
  • 那就做吧,初步定下的方案是输入框和登陆按钮大小不变,在键盘弹出的时候让logo的大小和位置进行改变,从而给键盘腾出位置,当然在键盘收起的时候还要给它还原一下,就像什么都没发生一样,嗯对,就是这样,说了这么...
  • input输入框是通过position定位一直放在页面底部,当点击input进行输入的时候,部分机型(尤其是ios系统)底部input被弹出键盘遮挡,如何解决这个问题呢?在解决这个问题的时候,有试过下面这种方法:在input的...
  • 一个属性搞定: android:windowSoftInputMode="adjustResize" //该属性是软键盘弹出时自动调整布局属性 放在AndroidManifest.xml的对应页面中即可。
  • 键盘遮挡输入框bug

    2018-12-29 18:59:23
    出现的问题像在底部的输入框,当键盘弹出输入框被遮住 解决思路有几种,需要有几点需要注意,稍后做一下解释,也是参考了好多网络资料再此表示感谢 1.一种时常见的简单直接在manifest中设置windowSoftInputModel...
  • 一、问题概述 ... 输入密码时输入框被系统键盘遮挡了,大大降低了用户操作体验,这就是开发中非常常见的软键盘遮挡的问题,该如何解决? 二、简单解决方案 方法一  在你的activity中的oncreate中set

空空如也

空空如也

1 2 3 4 5 6
收藏数 111
精华内容 44
关键字:

解决键盘弹出输入框被遮挡