Android - 滚动时防止键盘被忽略

时间:2015-04-13 06:19:54

标签: android layout keyboard android-edittext scrollview

我有以下表格的活动布局

<relativelayout
<scrollview
<linearlayout
   <EditText1
   <EditText2
   <EditText3

 </linearlayout>
 </scrollview>
 </relativelayout>

每当我点击任何编辑文字键盘时,我都需要达到以下标记

    在编辑文本外单击时,
  1. 键盘应该消失 (工作正常,因为我在dispatchTouchEvent()中解雇键盘 法)。

  2. 用户滚动时键盘不应消失。 (目前它正在消失)

  3. 请指导一下。

    编辑-1代码添加了解除ke`

    @Override
    public boolean dispatchTouchEvent(MotionEvent event)
    {
        View view = getCurrentFocus();
        boolean ret = super.dispatchTouchEvent(event);
    
        if (view instanceof EditText)
        {
            View w = getCurrentFocus();
            int scrcoords[] = new int[2];
            w.getLocationOnScreen(scrcoords);
            float x = event.getRawX() + w.getLeft() - scrcoords[0];
            float y = event.getRawY() + w.getTop() - scrcoords[1];
    
            if (event.getAction() == MotionEvent.ACTION_UP && (x < w.getLeft() || x >= w.getRight() || y < w.getTop() || y > w.getBottom()))
            {
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(), 0);
            }
        }
        return ret;
    }`
    

2 个答案:

答案 0 :(得分:0)

您应该根据编辑文本的焦点来处理它。我认为这可能会有所帮助:

 EditText txtEdit = (EditText) findViewById(R.id.edittxt);

 txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {          

        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
               // code to execute when EditText loses focus
            }
        }
    });

答案 1 :(得分:0)

在处理此问题之前,为什么不了解在侦听器附加到视图时视图的工作方式。

  

在触摸事件(包括手势)的整个传播过程中包围你的头脑是必不可少的,在编码时你会发现自己被不同的ViewGroups(或视图)的行为所困扰,当他们将触摸听众附加到他们身上时希望你的代码实际上不会按预期工作。

This文章不仅可以帮助您解决这个问题,还可以帮助您解决所有未来的观点和听众问题。

一旦完成它,也许你可以回答你自己的问题。