zoukankan      html  css  js  c++  java
  • Android App监听软键盘按键的三种方式

    前言:

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

    效果图:

    function 1:

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

       @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的方法来监听软键盘按键。

    private OnKeyListener onKeyListener = new OnKeyListener() {
             
            @Override
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if(keyCode == KeyEvent.KEYCODE_ENTER){
                    /*隐藏软键盘*/
                    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;
            }
        };
    edittext.setOnKeyListener(onKeyListener);

    function 3:

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

    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键可以显示不同的文字和图案)。

    <edittext android:id="@+id/edittext" android:layout_width="match_parent" android:layout_height="wrap_content" android:singleline="true" android:imeoptions="actionSearch"></edittext>

    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

  • 相关阅读:
    Balanced Binary Tree
    Swap Nodes in Pairs
    Reverse Nodes in k-Group
    Reverse Linked List II
    Remove Nth Node From End of List
    Remove Duplicates from Sorted List II
    Remove Duplicates from Sorted List
    Partition List
    Merge Two Sorted Lists
    【Yii2.0】1.2 Apache检查配置文件语法
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5915802.html
Copyright © 2011-2022 走看看