美文网首页
EditText的焦点事件以及键盘问题

EditText的焦点事件以及键盘问题

作者: 鹅鹅鹅曲项向天歌呀 | 来源:发表于2019-09-27 08:34 被阅读0次

最近,公司需求,需要一打开界面,就要显示软键盘,并且焦点在第一个输入框上面,可直接输入,输入时背景颜色为蓝色,离开时检查是否输入内容是否合法,合法,则背景颜色为灰色,不合法,则为红色.
先来看看,软键盘的打开和隐藏,直接上代码.


 /**
  * 方法一:显示软键盘
  * 这个方法需要延时调用(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);
    }
}

相关文章

网友评论

      本文标题:EditText的焦点事件以及键盘问题

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