android 获取键盘回车键事件,设置软键盘回车键显示内容,点击空白处隐藏软键盘

首先设置EditText的回车属性

drawable文件

 

@drawable/editcolor


    
    

EditText属性

 

activity完整代码

 

    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        //这里注意要作判断处理,ActionDown、ActionUp都会回调到这里,不作处理的话就会调用两次
        if (KeyEvent.KEYCODE_ENTER == event.getKeyCode() && KeyEvent.ACTION_DOWN == event.getAction()) {
            String name = login_name.getText().toString();
            String passw = login_pasw.getText().toString();
            if (TextUtils.isEmpty(name)) {
//                    ToastUtil.showInfo(this, "请输入用户名", Toast.LENGTH_LONG);
                Toast.makeText(this, "请输入用户名", Toast.LENGTH_SHORT).show();
                return false;
            }
            if (TextUtils.isEmpty(passw)) {
//                    ToastUtil.showInfo(this, "请输入密码", Toast.LENGTH_LONG);
                Toast.makeText(this, "请输入密码", Toast.LENGTH_SHORT).show();
                return false;
            }
                logtest(name, passw);//登录方法
            
            //处理事件
            return true;
        }
        return super.dispatchKeyEvent(event);
    }

 

获取回车按钮事件方法二:

mEtGoodName.setOnEditorActionListener((v, actionId, event) -> {
    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
        //搜索
 
        return true;
    }
    return false;
});

 

 

附:

设置软键盘回车键显示内容

显示搜索

 

    android:id="@+id/homesosoedit"
    android:layout_width="0dp"
    android:layout_height="25dp"
    android:background="@null"
    android:hint="请输入你要找的内容"
    android:textColor="@color/login_black"
    android:textColorHint="@color/bababa"
    android:textCursorDrawable="@drawable/editcolor"
    android:imeOptions="actionSearch"
    android:singleLine="true"
    android:textSize="13dp"
    android:layout_weight="8"/>
显示开始

 

 

android:imeOptions="actionGo"
显示完成

 

 

android:imeOptions="actionDone"
显示下一个

 

android:singleLine="true"
android:imeOptions="actionNext"
发送

 

android:imeOptions="actionSend"

 

自定义展开或收起软键盘

 

public class CommonUtils {

    public static void showSoftInput(Context context ) {
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);
//        imm.showSoftInput(view, InputMethodManager.SHOW_FORCED);
    }

    public static void hideSoftInput(Context context, View view) {
        InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0); //强制隐藏键盘
    }
}

 

点击空白处隐藏软键盘

 

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if (ev.getAction() == MotionEvent.ACTION_DOWN) {
        View v = getCurrentFocus();
        if (isShouldHideKeyboard(v, ev)) {
            hideKeyboard(v.getWindowToken());
        }
    }
    return super.dispatchTouchEvent(ev);
}

private boolean isShouldHideKeyboard(View v, MotionEvent event) {
    if (v != null && (v instanceof EditText)) {
        int[] l = {0, 0};
        v.getLocationInWindow(l);
        int left = l[0],
                top = l[1],
                bottom = top + v.getHeight(),
                right = left + v.getWidth();
        if (event.getX() > left && event.getX() < right
                && event.getY() > top && event.getY() < bottom) {
            // 点击EditText的事件,忽略它。
            return false;
        } else {
            return true;
        }
    }
    // 如果焦点不是EditText则忽略,这个发生在视图刚绘制完,第一个焦点不在EditText上,和用户用轨迹球选择其他的焦点
    return false;
}

/**
 * 获取InputMethodManager,隐藏软键盘
 *
 * @param token
 */
private void hideKeyboard(IBinder token) {
    if (token != null) {
        InputMethodManager im = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        im.hideSoftInputFromWindow(token, InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

你可能感兴趣的:(移动开发)