文档章节

Android App监听软键盘按键的三种方式

让代码飞一会
 让代码飞一会
发布于 2014/09/29 17:00
字数 760
阅读 85
收藏 1

前言:


我 们在android手机上面有时候会遇到监听手机软键盘按键的时候,例如:我们在浏览器输入url完毕后可以点击软键盘右下角的“GO”按键加载url页 面;在点击搜索框的时候,点击右下角的search符号键可以进行搜索;或者在全部数据输入完毕后,点击右下角的"done"就马上进行下一步操作。

效果图:
























function 1:


重写Activity的dispatchKeyEvent(KeyEvent event)方法,在其中监听KeyEventKey.KEYCODE_ENTER键(右下角确定键),当此键按下的时候,隐藏输入法软键盘,设置 edittext内容和加载webview内容。

  1. @Override  
        public boolean dispatchKeyEvent(KeyEvent event) {  
            if(event.getKeyCode() == KeyEvent.KEYCODE_ENTER){  
                /*隐藏软键盘*/  
                InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
                if(inputMethodManager.isActive()){  
                    inputMethodManager.hideSoftInputFromWindow(MainActivity.this.getCurrentFocus().getWindowToken(), 0);  
                }  
                  
                edittext.setText("success");  
                webview.loadUrl(URL);  
                return true;  
            }  
            return super.dispatchKeyEvent(event);  
        }

function 2:


重写dispatchKeyEvent(KeyEvent event)的方法感觉有点用牛刀的感觉,因为我们非常可能在这个方法中进行其他任务,所以我们可以使用OnKeyListener的方法来监听软键盘按键。

  1. private OnKeyListener onKeyListener = new OnKeyListener() {  
              
            @Override  
            public boolean onKey(View v, int keyCode, KeyEvent event) {  
                if(keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN){  
                    /*隐藏软键盘*/  
                    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
                    if(inputMethodManager.isActive()){  
                        inputMethodManager.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);  
                    }  
                      
                    edittext.setText("success");  
                    webview.loadUrl(URL);  
                      
                    return true;  
                }  
                return false;  
            }  
        };


  1. edittext.setOnKeyListener(onKeyListener);

function 3:


第三种方法我认为可以帮助程序员更精确的判断右下角按键情况,以便应对更加复杂的情况。它可以帮助程序员依据当前邮件下为“GO”,“done”,“search”键的情况下做出更细分的操作。


  1. edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {  
                  
                @Override  
                public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {  
                    /*判断是否是“GO”键*/  
                    if(actionId == EditorInfo.IME_ACTION_GO){  
                        /*隐藏软键盘*/  
                        InputMethodManager imm = (InputMethodManager) v  
                                .getContext().getSystemService(  
                                        Context.INPUT_METHOD_SERVICE);  
                        if (imm.isActive()) {  
                            imm.hideSoftInputFromWindow(  
                                    v.getApplicationWindowToken(), 0);  
                        }  
                          
                        edittext.setText("success");  
                        webview.loadUrl(URL);  
                          
                        return true;  
                    }  
                    return false;  
                }  
            });

改变软键盘右下角确定键样式:


软键盘输入法的按键并不是一成不变的,例如它的右下角的“确定”键,在有搜索框的时候就会变成带搜索图标的按键,在浏览器地址栏的时候则会变成 “GO”键,我们在写App的时候也可能根据情况的不同设置输入法的“确定”键,改变方法就是给EditText控件的imeOptions属性设置成不 同的值(此时Enter键可以显示不同的文字和图案)。

  1. <EditText  
            android:id="@+id/edittext"  
            android:layout_width="match_parent"  
            android:layout_height="wrap_content"  
            android:singleLine="true"  
            android:imeOptions="actionSearch"/>

actionNone : 回车键,按下后光标到下一行
actionGo : Go,
actionSearch : 放大镜
actionSend : Send
actionNext : Next
actionDone : Done,确定/完成,隐藏软键盘,即使不是最后一个文本输入框

题外话:


       我在写这个demo的时候,发现了webview的一个问题,就是直接使用webview.load(url)方法会在手机上面弹出系统浏览器来访问 url链接,而不是我们设置的webview,我找到的解决办法就是使用webview.setWebViewClient(....)的方法来确保 url会在activity的webview上面加载。


demo下载地址:


http://download.csdn.net/detail/zhufuing/6903671


本文转载自:http://blog.csdn.net/zhufuing/article/details/18964725

共有 人打赏支持
让代码飞一会
粉丝 171
博文 36
码字总数 3406
作品 0
海淀
项目经理
加载中

评论(1)

千里山南
千里山南
哇,大讯飞输入法2
Android开发之EditText属性详解

1、EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformation...

的书法上的
2014/07/28
0
0
android 键盘状态,获取键盘显示和隐藏

要设置弹出键盘是否覆盖Activity的view,或者软键盘的显示隐藏状态,需要用到Activity的一个属性: android:windowSoftInputMode 该属性在AndroidManifest.xml中设置,如下: <activity andr...

Remix_jx
2015/01/18
0
0
android软键盘的显示后隐藏

一:简述 点击文本框EditText,系统会自动弹出软键盘(其本质是一个Dialog),这必然会引起当前Activity主窗口的大小调整 而Android提供了不同的可选模式去调整活动窗口的大小,与之相关的属性...

sxl01890
2015/08/26
0
0
Android app开发常用知识列举

在Activity可见时进行页面刷新,即处于Activity栈顶,当然,这种刷新操作 可以在onStart,onResume,onRestart,onNewIntent+singleTask中,但最好的位置是onResume,其他方式可能会造成窗体泄露...

IamOkay
2015/02/14
0
1
如何让LinearLayout的图片不被软键盘挤压

我是一个Android初学者,今天在布局时遇到软键盘把LinearLayout底层的图片向上挤压的问题,通过在网上了解了软键盘的工作原理后才知道软键盘是一个Dialog即遮罩,所以只要这个遮罩遮住Linea...

陆龙喜
2014/04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
2
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
113
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
4
0
我为什么用GO语言来做区块链?

Go语言现在常常被用来做去中心化系统(decentralised system)。其他类型的公司也都把Go用在产品的核心模块中,并且它在网站开发中也占据了一席之地。 我们在决定做Karachain的时候,考量(b...

HiBlock
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部