java - 在 EditText 内部单击时,矩形 contains() 返回 false

标签 java android

我试图在点击 EditText 外部时关闭键盘。我复制并粘贴了 this post (zMan's answer) 中的代码进入我的MainActivity。当点击 EditText 外部时它工作得很好,但是当我点击它内部时,以下代码输出以下内容:

Rect dimensions: 12 1326 958 1419   //left, top, right, bottom
event_x: 636.0 event_y: 978.0   //event_y is outside the range

问题是event_y超出了1326和1419的范围,导致键盘关闭。但是,我知道我正在点击 EditText 内部,因为它在关闭后立即重新打开,很可能是因为调用了 super.onDispatchTouchEvent()。当我点击 EditText 内部时,事件的 y 坐标始终偏离约 350-400 个单位。

我大约 98% 确定问题与键盘取代 EditText 有关,因为 EditText 位于屏幕底部附近。当 EditText 位于屏幕顶部时,不会出现此问题。

@Override
public boolean dispatchTouchEvent( MotionEvent event )
{
    if ( event.getAction() == MotionEvent.ACTION_DOWN )
    {
        View view = getCurrentFocus();

        if ( view instanceof EditText )
        {
            Rect outRect = new Rect();
            view.getGlobalVisibleRect( outRect );

            //if touch event occurred outside of the EditText
            if ( ! outRect.contains((int)event.getRawX(), (int)event.getRawY()) )
            {
                //I SHOULD NOT REACH THIS CODE WHEN TAPPING INSIDE EditText
                Debug.print( "Rect dimensions: " + outRect.flattenToString() );
                Debug.print( "event_x: " + event.getRawX() + " event_y: " + event.getRawY() );
                ViewUtil.closeKeyboard( this );
            }
        }
    }

    return super.dispatchTouchEvent( event );
}

如果我需要提供更多信息,请告诉我。

最佳答案

使用event.getX()event.getY()而不是getRawX()getRawY()

关于java - 在 EditText 内部单击时,矩形 contains() 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41171672/

相关文章:

java - 快速排序中的枢轴数

java - 重复是因为 Oracle 太快还是多线程?

java - 基本递归回溯(机器人二维寻路)

java - 使用广播接收器多次打开 Activity

java - 测试编译给出 "invalid target release: 1.8"

android - MapView 显示空白,但 MapFragments 正常工作

java - 使用 Volley 获取成功请求的 HTTP 状态码

android - 以编程方式将事件添加到日历

Android WebView 背景颜色

java - 由 getActionBar() 引起的 NullPointerException