美文网首页Android充电站
Android 软键盘相关问题集锦

Android 软键盘相关问题集锦

作者: 86cf4d336efc | 来源:发表于2017-05-19 15:08 被阅读73次

    一、布局被软键盘顶上去的解决办法

    在Manifest.xml文件中,给出问题的Activity设置属性:

    android:windowSoftInputMode="adjustPan|stateHidden"

    如:

     <activity 
            android:name=".activity.CitySelectorActivity"
            android:windowSoftInputMode="adjustPan|stateHidden"
      ></activity>
    

    二、EditText自动弹出软键盘和隐藏软键盘的方法

    隐藏软键盘的5种方法

    1. 在Manifest.xml文件中相应的Activity下添加如下代码即可:

       android:windowSoftInputMode="stateHidden" 
      
    2. 让EditText失去焦点,用EditText的clearFocus即可:

       edit.clearFocus();  
      
    3. 强制隐藏Android输入法窗口

       InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);  
       imm.hideSoftInputFromWindow(edit.getWindowToken(), 0);
      

      或者

       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
       imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
       (如果输入法在窗口上已经显示,则隐藏,反之则显示)
      
    4. EditText始终不弹出虚拟键盘

       edit.setInputType(InputType.TYPE_NULL);  
      
    5. 隐藏软件盘,imm.hideSoftInputFromWindow的第一个参数传当前的EditText对象。亲测有效!

       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
       imm.hideSoftInputFromWindow(etEditMsg.getWindowToken(),0);
      

    显示软键盘的方法

    有时,我们确实是想让EditText自动获得焦点并弹出软键盘,在设置了EditText自动获得焦点后,软件盘不会弹出。

    方法一:
    注意:此时是由于刚跳到一个新的界面,界面未加载完全而无法弹出软键盘。此时应该适当的延迟弹出软键盘,如500毫秒(保证界面的数据加载完成,如果500毫秒仍未弹出,则延长至1000毫秒)。
    可以在EditText后面加上一段代码,实例代码如下:

    Timer timer = new Timer();  
    timer.schedule(new TimerTask() {  
        public void run() {  
            InputMethodManager inputManager = (InputMethodManager) editText.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);  
            inputManager.showSoftInput(editText, 0);  
        }  
    }, 500);  
    

    方法二:给activity配置加入属性

    android:windowSoftInputMode="adjustResize"
    

    三、软键盘的按键设置

    搜索键及按搜索执行操作

    1.xml布局的EditText中加入以下代码

    android:imeOptions="actionSearch"
    

    2.在Activity中给EditText设置 setOnEditorActionListener 侦听

    etSearch.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                    // 当按了搜索之后关闭软键盘
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
                    
                    //执行的代码
    
                    return true;
                }
                return false;
            }
        });
    

    3.完整例子

    XML布局

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="5dp"
        tools:context=".MainActivity">
    
        <EditText
            android:id="@+id/main_search"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="请输入要搜索的关键字"
            android:imeOptions="actionSearch"
            android:singleLine="true" />
    </LinearLayout>
    

    MainActivity

    package dao.junwen.com.test;
    
    import android.app.Activity;
    import android.content.Context;
    import android.os.Bundle;
    import android.view.KeyEvent;
    import android.view.inputmethod.EditorInfo;
    import android.view.inputmethod.InputMethodManager;
    import android.widget.EditText;
    import android.widget.TextView;
    
    public class MainActivity extends Activity implements TextView.OnEditorActionListener {
    
        private EditText mSearch;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mSearch = (EditText) findViewById(R.id.main_search);
            initListener();
        }
    
        /**
         * 初始化监听
         */
        private void initListener() {
            mSearch.setOnEditorActionListener(this);
        }
    
        /**
         * 监听
         */
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH) {
                // 当按了搜索之后关闭软键盘
                ((InputMethodManager) mSearch.getContext().getSystemService(
                        Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(
                        MainActivity.this.getCurrentFocus().getWindowToken(),
                        InputMethodManager.HIDE_NOT_ALWAYS);
                return true;
            }
            return false;
        }
    }
    

    设置其他效果

    android:imeOptions指定了弹出键盘时右下角的按键的显示文字,未指定时默认为回车图标。

    android:imeOptions="flagNoExtractUi" //使软键盘不全屏显示,只占用一部分屏幕
    
    同时,这个属性还能控件软键盘右下角按键的显示内容,默认情况下为回车键
    
    android:imeOptions="actionNone" //输入框右侧不带任何提示
    
    android:imeOptions="actionGo" //右下角按键内容为'开始'
    
    android:imeOptions="actionSearch" //右下角按键为放大镜图片,搜索
    
    android:imeOptions="actionSend" //右下角按键内容为'发送'
    
    android:imeOptions="actionNext" //右下角按键内容为'下一步'
    
    android:imeOptions="actionDone" //右下角按键内容为'完成'

    相关文章

      网友评论

        本文标题: Android 软键盘相关问题集锦

        本文链接:https://www.haomeiwen.com/subject/gvuyxxtx.html