2015-10-20 39 views
0

有沒有辦法在Activity.dispatchTouchEvent(MotionEvent ev)中獲取對被觸摸視圖的引用?從MotionEvent X獲得視圖,Y

如果用戶點擊任何不是EditText的地方,我需要隱藏自定義的RelativeLayout「鍵盤」。而且由於我在使用活動,許多片段都有許多視圖組,並且每個組都有自己的許多視圖,其中一些視圖是EditText,因此在每個子視圖或子視圖組上設置onTouchEvent將會耗費太多工作量。

在MainActivity中,類似這樣的事情是我認爲的一個好方法。

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    if (mKeyboardLike.getVisibility() == View.VISIBLE) { 
     if (!isTouchedEditText(ev.getRawX(), ev.getRawY())) { 
      mKeyboardLike.setVisibility(View.GONE); 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 
private boolean isTouchedEditText(int x, int y){//viewFound instanceOf EditText; return true;} 

回答

0

我想這應該可以幫助您:

@Override 
public boolean dispatchTouchEvent(MotionEvent ev) { 
    int x = Math.round(ev.getX()); 
    int y = Math.round(ev.getY()); 
    for (int i = 0; i < getChildCount(); i++) { 
     if (isEditText(x, y, getChildAt(i))) { 
      return true; 
     } 
    } 

    return true; 
} 

public boolean isEditText(int x, int y, View view) { 
    if (view instanceof ViewGroup) { 
     for (int i = 0; i < getChildCount(); i++) { 
      if (isEditText(x, y, ((ViewGroup) view).getChildAt(i))) { 
       return true; 
      } 
     } 
    } else if (view instanceof EditText) { 
     if (x > view.getLeft() && x < view.getRight() && y > view.getTop() && y < view.getBottom()) { 
      return true; 
     } 
    } 
    return false; 
} 
相關問題