EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听

软键盘显示和隐藏的监听:

注: mReplayRelativeLayout是EditText的父布局
 //监听软键盘是否显示或隐藏
        mReplayRelativeLayout.getViewTreeObserver().addOnGlobalLayoutListener(
                new ViewTreeObserver.OnGlobalLayoutListener() {
                    @Override
                    public void onGlobalLayout() {
                        Rect r = new Rect();
                        mReplayRelativeLayout.getWindowVisibleDisplayFrame(r);
                        int screenHeight = mReplayRelativeLayout.getRootView()
                                .getHeight();
                        int heightDifference = screenHeight - (r.bottom);
                        if (heightDifference > 200) {
                            //软键盘显示
// changeKeyboardHeight(heightDifference);
                        } else {
                            //软键盘隐藏

                        }
                    }

                });

点击一个控件使EditText获取焦点并弹出软键盘:
在该控件的点击事件中写以下代码:

                mEditText.setFocusable(true);
                mEditText.setFocusableInTouchMode(true);
                mEditText.requestFocus();
                mEditText.findFocus();
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.showSoftInput(mEditText, InputMethodManager.SHOW_FORCED);// 显示输入法

EditText的隐藏方法:

注:该方法其实是如果软键盘隐藏的状态这打开软键盘,反之着相反。

  InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);

EditText让其在刚进页面的时候不被选中(不处于焦点状态):

解决办法:

在EditText的父布局的xml文件中把焦点占据,写一下代码:

android:focusable="true"
android:focusableInTouchMode="true"

注:点击EditText后使其获取焦点并弹出软件盘,推荐使用setOnTouchListener监听:

  mReplayEditText.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mReplayEditText.setFocusable(true);
                mReplayEditText.setFocusableInTouchMode(true);
                return false;
            }

        });
时间: 2024-10-14 12:38:32

EditText获取和失去焦点,软键盘的关闭,和软键盘的显示和隐藏的监听的相关文章

软键盘显示与隐藏的监听

/** * 软键盘显示与隐藏的监听 */ private void softKeyboardListnenr() { SoftKeyBoardListener.setListener(getActivity(), new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() { @Override public void keyBoardShow(int height) {/*软键盘显示*/ } @Override public void key

Android项目:输入法软键盘显示/隐藏的监听和控制,InputMethodManager用法研究

在项目开发中,用到编辑框的地方经常涉及到要监听或者控制软键盘的显示/隐藏状态.本以为这是很容易解决的一个小问题,没想到当初碰到这个问题才明白还得花点小心思才能整好.现将针对软键盘的显示/隐藏状态的监听/监控方法做一些总结,以备后用. 一.点击空白处隐藏软键盘 这是具有编辑框焦点的页面对输入法软键盘状态监听的一般需求和解决方法. 首先获得InputMethodManager:        InputMethodManager manager = (InputMethodManager) getS

android的EditText获取另一个焦点

在android关于开发过程EditText在setFocusable(false);后,设置时需要再次获得输入焦点setFocusable(true);问题后仍然无法获得焦点: 解决的方法: 对EditText设置后就能够了. et.setFocusable(true); et.setFocusableInTouchMode(true); et.requestFocus(); et.findFocus(); 版权声明:本文博客原创文章.博客,未经同意,不得转载.

C#全局键盘监听(Hook)的使用

一.为什么需要全局键盘监听? 在某些情况下应用程序需要实现快捷键执行特定功能,例如大家熟知的QQ截图功能Ctrl+Alt+A快捷键,只要QQ程序在运行(无论是拥有焦点还是处于后台运行状态),都可以按下快捷键使用此功能... 这个时候在程序中添加键盘监听肯定不能满足需求了,当用户焦点不在App上时(如最小化,或者用户在处理其它事物等等)键盘监听就失效了 二.怎样才能实现全局键盘监听? 这里需要用到Windows API,源码如下:(可以作为一个工具类[KeyboardHook.cs]收藏起来) u

在EditText中限制输入,自定义样式,监听输入的字符,自动换行

自动获取焦点 <!-- 添加:<requestFocus /> 会自动获取焦点 --> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:ems="10" android:gravity="center_horizontal" android:hint="自

【转】【C#】全局键盘监听

using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Windows.Forms; using System.Reflection; namespace 梦琪动漫屋 { /// <summary> /// 键盘钩子/// </summary> class KeyboardHook { public ev

Android基础入门教程——3.5 监听EditText的内容变化

Android基础入门教程--3.5 监听EditText的内容变化 标签(空格分隔): Android基础入门教程 本节引言: 在前面我们已经学过EditText控件了,本节来说下如何监听输入框的内容变化! 这个再实际开发中非常实用,另外,附带着说下如何实现EditText的密码可见 与不可见!好了,开始本节内容! 1.监听EditText的内容变化 由题可知,是基于监听的事件处理机制,好像前面的点击事件是OnClickListener,文本内容 变化的监听器则是:TextWatcher,我们

【转】Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法

Android开发之ListView+EditText-要命的焦点和软键盘问题解决办法 [原文链接] 这篇文章完美的解决了我几个月没结论的bug... 感谢热爱分享的技术达人~ 我是怎么走进这个大坑的..... 需求: 在listview中出一个EditText 接受用户输入消息. 前期解决方案: 给这个EditText绑定焦点事件.... 悲剧就开始了... 知道吗?当这个EditTextView被点了下,它的焦点就不断的获取,失去,获取,失去...  只点一下... 就频繁的重复..最后大部

(二十九)点击EditText关闭系统软键盘

/** * 关闭系统软键盘 */ private void closeKeyboard(EditText et) { // TODO Auto-generated method stub if (android.os.Build.VERSION.SDK_INT <= 10) { tv.setInputType(InputType.TYPE_NULL); } else { getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_I