最近,公司需求,需要一打开界面,就要显示软键盘,并且焦点在第一个输入框上面,可直接输入,输入时背景颜色为蓝色,离开时检查是否输入内容是否合法,合法,则背景颜色为灰色,不合法,则为红色.
先来看看,软键盘的打开和隐藏,直接上代码.
/**
* 方法一:显示软键盘
* 这个方法需要延时调用(editText.postDelayed),具体时间,一半看手机性能,不固定.大差不差就行
*理由:UI加载完毕之后方能生效
*
* @param context
*/
private void showSoftKeyboard(Context context) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE);
if (imm == null) return;
imm.showSoftInput(editText, InputMethodManager.SHOW_FORCED);
}
/**
* 方法一:显示软键盘
* 这个方法不需要延时,直接就可以展示.
*/
private void showSoftKeyboard() {
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}
/**
* 方法一:关闭软键盘
*
* @param context
*/
private void hideSoftKeyboard(Context context) {
InputMethodManager imm = (InputMethodManager) context.getSystemService(context.INPUT_METHOD_SERVICE);
if (imm == null) return;
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); //强制隐藏键盘
}
/**
* 方法二:关闭软键盘
*/
private void hideSoftKeyboard() {
View view = getWindow().peekDecorView();
if (view != null) {
InputMethodManager inputmanger = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
inputmanger.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
再来看看给EditText设置焦点,
为了一进来界面,给,EditText的背景颜色为蓝牙,所以使用了setOnFocusChangeListener监听,焦点状态,当然了,也可以在布局里面设置默认就是蓝牙,氮素如果有很多的EditText的话,就不方便了.
注意:一定要检查父布局,有没有设置焦点,不然可能冲突,导致,键盘弹出来了,但是输入不进去文字,都是焦点的问题
public class MainActivity extends AppCompatActivity {
private EditText editText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editText = findViewById(R.id.editText);
//若获取焦点写在setOnFocusChangeListener前面.第一次打开界面,则不会触发setOnFocusChangeListener()事件.
// editText.setFocusable(true);
// editText.setFocusableInTouchMode(true);
// editText.requestFocus();
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
Log.e("mcy", "焦点 " + b);
}
});
//写在后面,第一打开会触发setOnFocusChangeListener事件,[根据个人需求来,放前面,放后面]
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.requestFocus();
editText.postDelayed(new Runnable() {
@Override
public void run() {
showSoftKeyboard(MainActivity.this);
}
}, 500);
showSoftKeyboard();
}
@Override
protected void onDestroy() {
super.onDestroy();
hideSoftKeyboard();
hideSoftKeyboard(this);
}
}
网友评论