首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在回收器视图中切换到下一个EditText时,如何保持软键盘打开?

在回收器视图中切换到下一个EditText时,如何保持软键盘打开?
EN

Stack Overflow用户
提问于 2019-05-23 22:01:35
回答 1查看 86关注 0票数 3

我面临的问题是,当用户单击键盘上的下一步按钮时,程序应该专注于屏幕上的下一个EditText,并保持键盘打开,直到屏幕上没有启用的EditTexts。当不再启用EditTexts时,键盘应消失。

另一个问题是,如果有一个EditText当前在屏幕上不可见,那么在用户选择它之前,它不会获得焦点。

我尝试过使用输入法管理器在EditText有焦点时显示键盘,在没有焦点时隐藏键盘。如果不再启用已启用的EditTexts,则键盘仍然存在。

代码语言:javascript
复制
final InputMethodManager imm = (InputMethodManager) 
context.getSystemService(Context.INPUT_METHOD_SERVICE);

    if (variable.getType().equals("Value")) {
        if (variable.getFormat().equals("Number") || variable.getFormat().equals("2Number")) {
            viewHolder.inputValue.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view, boolean hasFocus) {
                    if(hasFocus){
                        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
                    } else if(hasFocus && !viewHolder.inputValue.isEnabled()){
                        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                    }
                }
            });
        } else if (variable.getFormat().equals("Text")) {
            viewHolder.messageText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view, boolean hasFocus) {
                    if(hasFocus){
                        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
                    } else if(hasFocus && !viewHolder.inputValue.isEnabled()){
                        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                    }
                }
            });
        }
    } else if (variable.getType().equals("Message")) {
        viewHolder.messageText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean hasFocus) {
                if(hasFocus){
                    imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
                } else if(hasFocus && !viewHolder.inputValue.isEnabled()){
                    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
                }
            }
        });
    } else {
        //imm.hideSoftInputFromWindow(viewHolder.itemView.getWindowToken(), 0);
    }

EditTexts存储在回收视图内的cardview中。每张卡都有一个可变类型。单击键盘上的“下一步”按钮时,只有“值”和“消息”变量类型才能获得焦点。

我希望用户能够通过单击键盘上的next按钮在RecyclerView中滚动已启用的EditTexts。如果EditText不在屏幕上的视图内,屏幕应该向下滚动到它以获得焦点。此外,如果EditText被禁用,它将永远不会获得焦点。

EN

Stack Overflow用户

发布于 2019-05-23 22:24:26

覆盖onEditorAction方法,并为要使键盘保持打开状态的每个editText返回true

代码语言:javascript
复制
edittext.setOnEditorActionListener(new TextView.OnEditorActionListener() {
      @Override
      public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
          if (actionId == EditorInfo.IME_ACTION_DONE) {
             //optional: you can run some logic here.
          }
          //return true to not hide the keyboard
          return true;
      }
});
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56276979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档