2017-01-19 5 views

Antwort

0

Überschreiben Sie onTouchEvent() des Dialogfelds und überprüfen Sie den Aktionstyp. Wenn der Aktionstyp MotionEvent.ACTION_OUTSIDE ist, bedeutet dies, dass der Benutzer außerhalb der Dialogregion interagiert. Also in diesem Fall können Sie Ihr Dialogfeld schließen oder entscheiden, was Sie ausführen wollten:

public boolean onTouchEvent(MotionEvent event) 
{ 
    if(event.getAction() == MotionEvent.ACTION_OUTSIDE){ 
    System.out.println("Touched outside the dialog"); 
    } 
    return false; 
} 
0

Wenn Sie überprüfen wollen, ob die Berührung außerhalb des Dialogs oder Blick passiert, haben Sie DispatchTouchEvent() in der Aktivität außer Kraft zu setzen und checke diese Methode ein. Wie:
eine Schnittstelle Erstellen Sie die Touchoutside wie unten auslösen:

/** 
* Interface definition for a callback to be invoked when a touch event has occurred outside a formerly specified view. 
* See {@link #setOnTouchOutsideViewListener(View, OnTouchOutsideViewListener)} 
*/ 
public interface OnTouchOutsideViewListener { 
    /** 
    * Called when a touch event has occurred outside a given view. 
    * 
    * @param view The view that has not been touched. 
    * @param event The MotionEvent object containing full information about the event. 
    */ 
    void onTouchOutside(View view, MotionEvent event); 
} 

Angenommen, wenn Sie Basis Aktivität haben, können Sie den gesamten Code in sie setzen, sonst verwenden Sie es in Tätigkeit.
Override dispatchTouchEvent(), die für alle Berührung ausgelöst wird, passiert auf dem Bildschirm. Hier werden wir die berührten x und y auf dem Bildschirm bekommen, so müssen Sie die Ansichten x und y bekommen und prüfen, ob dieser Punkt in Reichweite ist.

@Override 
public boolean dispatchTouchEvent(final MotionEvent ev) { 
    if (ev.getAction() == MotionEvent.ACTION_DOWN) { 
     // Notify touch outside listener if user tapped outside a given view 
     if (mOnTouchOutsideViewListener != null && mTouchOutsideView != null 
       && mTouchOutsideView.getVisibility() == View.VISIBLE) { 
      Rect viewRect = new Rect(); 
      mTouchOutsideView.getGlobalVisibleRect(viewRect); 
      if (!viewRect.contains((int) ev.getRawX(), (int) ev.getRawY())) { 
       mOnTouchOutsideViewListener.onTouchOutside(mTouchOutsideView, ev); 
       return false; 
      } 
     } 
    } 
    return super.dispatchTouchEvent(ev); 
} 

Für Touch außerhalb Hörer einstellen und ihn zu entfernen, wie unten in der Aktivität Methoden erstellen:

/** 
* Sets a listener that is being notified when the user has tapped outside a given view. To remove the listener, 
* call {@link #removeOnTouchOutsideViewListener()}. 
* <p/> 
* This is useful in scenarios where a view is in edit mode and when the user taps outside the edit mode shall be 
* stopped. 
* 
* @param view 
* @param onTouchOutsideViewListener 
*/ 
public void setOnTouchOutsideViewListener(View view, OnTouchOutsideViewListener onTouchOutsideViewListener) { 
    mTouchOutsideView = view; 
    mOnTouchOutsideViewListener = onTouchOutsideViewListener; 
} 

public void removeOnTouchOutsideViewListener() { 
    mTouchOutsideView = null; 
    mOnTouchOutsideViewListener = null; 
} 

Also endlich, was Sie tun sollten ist, um den obersten übergeordneten Ansicht passieren die setOnTouchOutsideViewListener() in onCreate() von activity.In Ihrem Fall nach dialog.show(), Übergeben Sie Dialoge übergeordnete Layout. Wie:

View detectTouchOutsideThisView = findViewById(R.id.parent_view); 
setOnTouchOutsideViewListener(detectTouchOutsideThisView, new OnTouchOutsideViewListener() { 
    void onTouchOutside(View view, MotionEvent event) { 
     //If touch outside this will be triggered 
    } 
}); 
+0

danke akhay es hat sehr geholfen –

Verwandte Themen