精华内容
下载资源
问答
  • 当填写这些信息的时候,软键盘会遮挡登陆按钮,这使得用户体验较差,所以今天就来解决这个问题 1:登陆布局界面如下 <?xml version=1.0 encoding=utf-8?> <RelativeLayout xmlns:android=...
  • Android开发软键盘遮挡问题汇总

    千次阅读 2016-08-23 14:39:37
    最近好多人在Android开发中都遇到了登录界面或者其他地方,弹出软键盘的时候遮挡按钮或者输入框或按钮的问题,所以在这里集思广益将网上大部分的思路整合一下,贴出来

    先上效果图:

    当软键盘出来的时候会自动把登录按钮顶上去,显示出来,就不会有遮挡的情况了



    前言:

    最近好多人在开发中都遇到了登录界面或者其他地方,弹出软键盘的时候遮挡按钮或者输入框的问题,所以在这里集思广益将网上大部分的思路整合一下,贴出来

    写了一个Demo演示一下:


    正常情况下是这样的,不过软键盘弹出来就变成了:




    可以看到将两个按钮遮住了一个半.




    正文:

    Android虽然提供了WindowSoftInputMode,亲测,效果并不是很好,达不到预期的效果,这里从网上扒了扒主要的实现思路,这里感谢:
    http://blog.csdn.net/nn955/article/details/17717749


    开始了,主要有两种思路:


    1.通过窗体的根View求出总的区域和可视区域就可以计算出被遮挡的区域的高度,如果超过一定的值就是软键盘弹出了,然后将根View ScrollTo到一个位置

    2.自定义根View,集成(FrameLayout,LinearLayout,RelativeLayout需要什么集成什么),当软键盘弹出的时候肯定会走onSizeChange方法,这里重写onSizeChange方法,在里面做我们的逻辑即可

    只要判断出了软键盘弹出之后,思路就很开阔了,可以根据自己的情况选择怎么实现,这里提供几种常用的思路:
    (1) 移动到指定的位置,不让软键盘遮挡
    (2) 改变布局的PaddingTop,网上移动一段距离,让遮挡的部分显示出来
    (3) 改变某一个View的高度,让其他显示出来
    (4) 隐藏某一个View,让其他的显示出来
    ........................

    贴出代码:

    <?xml version="1.0" encoding="utf-8"?>
    <com.example.justin.takephotodemo.MyLinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="10dp"
        tools:context="com.example.justin.takephotodemo.MainActivity">
    
    
        <ImageView
            android:id="@+id/iv"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:background="@drawable/csdn"
            android:layout_marginBottom="10dp"
            />
    
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入用户名"/>
    
        </android.support.design.widget.TextInputLayout>
    
        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
    
            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="请输入密码"/>
    
        </android.support.design.widget.TextInputLayout>
    
        <Button
            android:id="@+id/register"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="select"
            android:text="注册"/>
    
        <Button
            android:id="@+id/login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="登录"/>
    
    
    </com.example.justin.takephotodemo.MyLinearLayout>

    第一种思路的实现:





    通过图可以看出,得到总的高度,和获取可见区域的高度就可以算出被隐藏的高度,通过比较即可判断是否是软键盘弹出了
    计算RootView要移动的距离,需要知道被移动View的坐标,通过坐标的高度加上本身View的高度,减去可见区域的bottom就是要移动的距离
    好吧,图画的有点抽象,........................

    在onCreate中:
            mLayout = (LinearLayout) findViewById(R.id.layout);
            mIv = (ImageView) findViewById(R.id.iv);
            Button mLogin = (Button) findViewById(R.id.login);
    
            autoScrollView(mLayout,mLogin);

        /**这里判断出软键盘弹出,之后的逻辑可以自己定,1.隐藏 2.移动3.改变高度4.改变paddingTop.......都可以
    
         * @param root 最外层的View
         * @param scrollToView 不想被遮挡的View,会移动到这个Veiw的可见位置
         */
        private void autoScrollView(final View root, final View scrollToView) {
            root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect rect = new Rect();
                    //获取root在窗体的可视区域
                    root.getWindowVisibleDisplayFrame(rect);
                    //获取root在窗体的不可视区域高度(被遮挡的高度)
                    int rootInvisibleHeight = root.getRootView().getHeight() - rect.bottom;
                    //若不可视区域高度大于150,则键盘显示
                    if (rootInvisibleHeight > 150) {
                        int[] location = new int[2];
                        //获取scrollToView在窗体的坐标
                        scrollToView.getLocationInWindow(location);
                        //计算root滚动高度,使scrollToView在可见区域的底部
                        int srollHeight = (location[1] + scrollToView.getHeight()) - rect.bottom;
                        root.scrollTo(0, srollHeight);
                    } else {
                        //键盘隐藏
                        root.scrollTo(0, 0);
                    }
                }
            });
        }


    第二种实现方式:


    注意:需要在AndroidManifest中加上
    android:windowSoftInputMode="adjustResize"

    自定义layout
    public class MyLinearLayout extends LinearLayout {
        public MyLinearLayout(Context context) {
            super(context);
        }
    
        public MyLinearLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public MyLinearLayout(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        protected void onSizeChanged(int w, int h, int oldw, int oldh) {
            super.onSizeChanged(w, h, oldw, oldh);
            if (oldh > 0) {
                int screenHeight = this.getRootView().getHeight();
                if (oldh - h >= screenHeight / 3) {//弹出 (之后的逻辑可以自己定,1.隐藏 2.移动3.高度4.paddingTop.......)
                    Toast.makeText(getContext(), "弹出", Toast.LENGTH_SHORT).show();
                } else {//隐藏
                    Toast.makeText(getContext(), "隐藏", Toast.LENGTH_SHORT).show();
                }
            }
        }
    
    }

    好的以上内容就是这些了,第一次写博客,有些仓促,如果有什么错误或不妥的地方,欢迎大家评论,我会积极改正...





    展开全文
  • android软键盘顶布局 解决方法,在mainfest.xml中,在对应的Activity加: Android:windowSoftInputMode="adjustPan|stateHidden

    本文致力于成为平时的参考文档


    软键盘顶布局



    解决方法,在mainfest.xml中,在对应的Activity加:

    Android:windowSoftInputMode="adjustPan|stateHidden"


    展开全文
  • 我们在输入内容时弹出的软键盘都有可能把布局覆盖掉,这个时候我们只需要在oncreate里面写一句话就可以了 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); ...

    我们在输入内容时弹出的软键盘都有可能把布局覆盖掉,这个时候我们只需要在oncreate里面写一句话就可以了

    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

     

    展开全文
  • 1.软键盘的隐藏 EditText et_input ; Context mContext; InputMethodManager mKey = (InputMethodManager) mContext.getApplicationContext().  getSystemService(Co

    1.软键盘的隐藏

    EditText et_input ;

    Context mContext;

    InputMethodManager mKey = (InputMethodManager) mContext.getApplicationContext().

                                                     getSystemService(Context.INPUT_METHOD_SERVICE);

    mKey.hideSoftInputFromWindow(et_input.getWindowToken(), 0);

    2.软键盘的显示

    mKey.showSoftInput(et_input,InputMethodManager.SHOW_FORCED);

    
    展开全文
  • 最顶部是一个editText输入关键词,下面是一个list列表用来展示搜索内容。点击editText后弹出软键盘会卡顿,收回键盘时也会卡顿,时间还比较长,有3到5秒的样子。求大神给支支招。 各位大神一定帮帮忙啊!
  • android:id="@+id/et_key_word" android:layout_width="@dimen/qb_px_984" android:layout_height="@dimen/qb_px_106" android:layout_centerHorizontal="true" android:layout_marginTop="@
  • 3.判断是否显示软键盘接口   /* * Copyright (C) 2015-2016 Jacksgong(blog.dreamtobe.cn) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except ...
  • InputMethodManager imm = (InputMethodManager) getSystemService( Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
  • 安卓开发软键盘工具类,软键盘的操作。
  • android开发软键盘遮挡登陆按钮

    千次阅读 2015-09-02 12:30:29
    转自http://blog.csdn.net/yeaicff/article/details/44236853 在登陆和注册的时候经常会遇到键盘遮挡输入框和登陆按钮的情况,这时候我们需要做一些特殊处理将页面向上移动类似于微信这样
  • 在EditText控件接近底部的情况下 软键盘弹出后会把获得焦点的EditText控件遮挡 无法看到输入信息 防止这种情况发生 就须要设置AndroidManifest.xml的属性 前面的xml信息省略 在activity中 添加android:...
  • 场景底部edittext点击之后会上推整个布局 解决方案/** * 打开软键盘的 * @param editText */ private void showInputManager(EditText editText) { editText.setFocusable(true); editText.setFocusableIn
  • 在EditText控件接近底部的情况下 软键盘弹出后会把获得焦点的EditText控件遮挡 无法看到输入信息  防止这样的情况发生 就需要设置AndroidManifest.xml的属性 前面的xml信息省略 在activity中 增加android...
  • 今天想和大家聊一聊Android软键盘的处理,也就是android:windowSoftInputMode属性,相信大家都是知道这个属性的,但由于开发文档描述的模棱两可,大部分人对这个属性理解都不一样,甚至网上的一些中文文档也是对开发...
  • 主要介绍了Android开发软键盘用法,实例分析了Android软键盘的实现技巧,需要的朋友可以参考下
  • Android自定义软键盘

    千次下载 热门讨论 2012-08-29 15:09:21
    Android自定义软键盘
  • android解决软键盘遮挡
  • 隐藏软键盘一直是我头痛的事情,没有找到一种真正能隐藏的方法。点击EditText的时候总是弹出软键盘。-----杯具杯具(一):InputMethodManager im =(InputMethodManager) mEditgetContext() .getSystemService(Context...
  • 2019独角兽企业重金招聘Python工程师标准>>>其实非常简单,只要有两处代码做到了就好了1、设置输入法适应的方式getWindow()....2、设置EditText,加粗的部分就是重点了android:id="@+id/login_with_si...
  • 本文实例讲述了Android开发中软键盘用法。分享给大家供大家参考。具体如下:打开软键盘,有两个方法。一个是showSoftInput,一个是toggleSoftInput。package com.example.dd;import android.app.Activity;import ...
  • import android.app.Activity; import android.content.Context; import android.graphics.Rect; import android.os.Build; import android.util.DisplayMetrics; import android.view.inputmethod....
  • activity主窗口与软键盘的交互模式,可以用来避免输入法面板遮挡问题,Android1.5后的一个新特性。 这个属性能影响两件事情: 【一】当有焦点产生时,软键盘是隐藏还是显示 【二】是否减少活动主窗口大小以便腾出...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,223
精华内容 5,289
关键字:

安卓开发软键盘