代码之家  ›  专栏  ›  技术社区  ›  user246392

安卓:防止聊天窗口中的软键盘关闭

  •  0
  • user246392  · 技术社区  · 4 年前

    我正在制作一个聊天应用程序,希望在聊天窗口可见时保持软键盘打开。当用户点击同一页面上的任何其他控件时,键盘不应隐藏。我的视图层次结构如下:

    LinearLayout
       RecyclerView
       LinearLayout
    

    子线性布局具有 EditText 以及一个发送消息的按钮。显示页面后,我请求将注意力集中在编辑文本上,并使用 SHOW_FORCED 旗帜。问题是当我点击 RecyclerView 或者点击发送按钮,如果编辑文本有焦点,则键盘将隐藏。

    是否有可能确保编辑文本永远不会失去焦点(从而防止键盘消失)?我在iOS上能够轻松完成这项任务,但在Android上遇到了困难。

    0 回复  |  直到 4 年前
        1
  •  0
  •   Vishal Yadav Abhishek kumar    4 年前

    如果你想得到焦点 editText 别忘了用这个,它对我有用

        edit.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(!edit.hasFocus()){
            edit.requestFocus();
        }
      }
    });
    
        2
  •  0
  •   Fco P.    4 年前

    请记住,我没有尝试构建这个,因为它很复杂。如果时间允许,我会尝试添加一个示例。

    我猜你想构建类似whatsapp的东西。在我看来,最有希望的方法是在根linearLayout中设置一个全局touchListener,它消耗所有触摸事件,同时使子节点不可聚焦,从而允许您手动处理所有触摸事件。如果检测到滑动触摸,请相应滚动回收视图。如果在edittext区域检测到触摸,请设置焦点和;打开键盘。这样触摸就不会改变焦点状态,保持键盘打开。请记住,您可能需要处理所有其他触摸场景。首先创建监听器&让除了第一个布局之外的所有内容都不关注触摸,然后构建你的特定交互。

        3
  •  0
  •   Saikrishna Rajaraman    4 年前

    您可以做的是,当EditText失去焦点时,再次聚焦并显示键盘。但这只是权宜之计。如果你能分享到目前为止你所做的一切,那就很容易了。

    editText.setOnFocusChangeListener( new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v,boolean hasFocus) {
            if(!editText.hasFocus()) {
                editText.requestFocus();
                editText.postDelayed(() -> showSoftKeyboard(editText.getContext(),editText),100);
            }
        }
    });
    
    public static void showSoftKeyboard(Context context, View view) {
        InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (inputMethodManager != null) {
            inputMethodManager.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT);
        }
    } 
    

    延迟是因为有时焦点键盘不显示。

    推荐文章