需求中需要点击按钮弹出dialog对话框,在点击确定后焦点自动定位到Edittext中并弹出软键盘,开始把获取焦点并弹出软键盘代码写在确认按钮OnClickListener中,但只能自动获取焦点,软键盘无法弹出,废了好大半天也没搞出来,后来采用handler传递机制完美解决,具体原理不太清楚,有知道的可以私信我这个Android渣渣,不胜感激
tv_confirm.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mdialog.dismiss();
// 必须采用handler传递,否则导致键盘无法弹出
handler.sendEmptyMessage(100);
}
});
上边为点击dialog的确认按钮逻辑
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 100:
edit2.setVisibility(View.VISIBLE);
edit2.setHint("wweeee");
edit2.setFocusable(true);
edit2.setFocusableInTouchMode(true);
edit2.requestFocus();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
InputMethodManager imm = (InputMethodManager) getSystemService(FoucsAnSoftinputActivity.this.INPUT_METHOD_SERVICE);
imm.showSoftInput(edit2, 0);
break;
}
}
};
上边为handler中获取焦点及弹出软键盘逻辑代码