gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:07:11 27 4
gpt4 key购买 nike

我试图在点击 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com