Android edittext.setOnFocusChangeListener

Android edittext.setOnFocusChangeListener,android,Android,我对如何在android上定制键盘感兴趣,我看了这一页 我不明白这个页面中的一个方法。我尝试过,但每次我都发现不同的意思 如果有人知道这个页面,请帮助我,focus_listener.writer写了什么。我知道我们在关键方法上创建了新的Edittext。我知道当我们单击Edittext时,它会复制,当它的“复制”焦点改变时?当我们再次单击edittext时,键盘是可见的,因为复制可见的edittext,所以焦点没有变化,键盘变得不可见。我明白,但我完全相信我犯了错误。请帮帮我

我对如何在android上定制键盘感兴趣,我看了这一页

我不明白这个页面中的一个方法。我尝试过,但每次我都发现不同的意思

如果有人知道这个页面,请帮助我,focus_listener.writer写了什么。我知道我们在关键方法上创建了新的Edittext。我知道当我们单击Edittext时,它会复制,当它的“复制”焦点改变时?当我们再次单击edittext时,键盘是可见的,因为复制可见的edittext,所以焦点没有变化,键盘变得不可见。我明白,但我完全相信我犯了错误。请帮帮我

             // Find the EditText
            EditText edittext= (EditText)findViewById(...);

              // Make the custom keyboard appear
             edittext.setOnFocusChangeListener(new OnFocusChangeListener() {
             @Override public void onFocusChange(View v, boolean hasFocus) {
            if( hasFocus ) showCustomKeyboard(v); else hideCustomKeyboard();

调用
OnFocusChangeListener

当视图的焦点状态更改时要调用的回调的接口定义

什么是焦点更改

抽象void onFocusChange(视图v,布尔hasFocus)

当视图的焦点状态更改时调用

这很简单,当你作为用户点击编辑文本时,它会得到“焦点”,Android会显示系统键盘,让用户在里面写东西。由于您希望在每次EditText(或您想要的任何内容)获得焦点时显示自定义键盘而不是默认键盘,因此您可以调用方法
showCustomKeyboard
,即:

public void showCustomKeyboard( View v ) {
    mKeyboardView.setVisibility(View.VISIBLE);
    mKeyboardView.setEnabled(true);
    if( v!=null ) ((InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
}
mKeyboardView
是我们应该显示的键盘,而不是原来的键盘,而这一行:

if( v!=null ) ((InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
用于隐藏键盘上的默认设置(
hideSoftInputFromWindow

如果您理解我上面所说的,您就可以理解什么是
else hideCustomKeyboard()意味着,它的工作原理与普通Android一样,当用户离开编辑文本时,我们不需要再显示键盘,但因为这一次是你的键盘,你应该关心显示/隐藏它


“它进行复制,以及它的“复制”焦点何时更改?”

我不明白你的意思,它什么都不复制

“当我们再次单击edittext时,键盘处于可见状态,由于复制可见的edittext,因此焦点没有变化,键盘变得不可见”


不,如果您再次单击相同的编辑文本,它仍将具有焦点,当您更改焦点时,键盘将被隐藏

哦,天哪,我忘记我最初和你一样理解,但在我说了如何隐藏按键或2触式编辑文本后,我们不能用2触式编辑文本隐藏键盘好的,谢谢。