私はアンドロイドでダイアログを実装しています。ユーザーがダイアログボックスの外をクリックしても、ダイアログが表示されたときのダイアログ。setCanceledOnTouchOutside(boolean)がfalseに設定されていてもダイアログボックスの外側をクリックする方法
答えて
ダイアログのonTouchEvent()をオーバーライドし、アクションタイプを確認します。アクションタイプがMotionEvent.ACTION_OUTSIDE
の場合、ユーザーがダイアログ領域外で対話していることを意味します。したがって、この場合には、あなたは、ダイアログを閉じたり、実行したいかを決めることができます。
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("Touched outside the dialog");
}
return false;
}
あなたはタッチがダイアログまたはビューの外に起こったかどうかを確認したい場合は、活動にDispatchTouchEvent()
をオーバーライドすることがあり、その方法でチェックインしてください。同様に:
は、以下のようなtouchOutSideをトリガするためのインタフェースを作成します。
/**
* 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);
}
は、基本アクティビティを持っている場合、あなたはそれにすべてのコードを入れて、または他の活動で使用することができたとします。 dispatchTouchEvent()
をオーバーライドすると、画面上ですべてのタッチが発生したときにトリガーされます。ここではタッチされたxとyが画面に表示されるので、xとyのビューを取得し、このポイントがタッチ内にあるかどうかを確認する必要があります。リスナー外のタッチを設定し、それを除去するための
@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);
}
、以下のような活動のメソッドを作成します。
/**
* 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;
}
だから、最終的にはあなたが何をすべきかのonCreate()
にsetOnTouchOutsideViewListener()
に一番上の親ビューを渡し、ありますあなたのケースではdialog.show()
の後に、ダイアログの親のレイアウトを渡します。類似:
View detectTouchOutsideThisView = findViewById(R.id.parent_view);
setOnTouchOutsideViewListener(detectTouchOutsideThisView, new OnTouchOutsideViewListener() {
void onTouchOutside(View view, MotionEvent event) {
//If touch outside this will be triggered
}
});
ありがとうございましたakhayそれは多くの助けた –
- 1. Smaliコードのメソッドでbooleanをfalseに設定する方法
- 2. reloadOnSearchがfalseに設定されていても、コントローラーがリロードされます。
- 3. 外側をクリックしてください
- 4. Boostrapのモーダルダイアログは、常にshowがfalseに設定されていてもリフレッシュ時に表示されます
- 5. ASP.NETボタンのoptions.clientSubmitがfalseに設定されています
- 6. Thymeleafキャッシュがfalseに設定されています。
- 7. 値がboolean falseに評価される変数にオプションの値を指定する方法は?
- 8. Gerritリポジトリサーバー側のフックを設定する最も良い方法
- 9. 両方のチェックボックスにfalseが指定されている場合、
- 10. チェックボックスが選択されていないときにng-modelにfalse値を設定する方法
- 11. AndroidスタジオがsupportsRtlがfalseに設定されていてもR-T-Lリソースファイルを生成します
- 12. CausesValidationは "False"に設定されていますが、クライアント側の検証はまだ実行中です
- 13. プロパティが設定されていてもTryUpdateModelがfalseを返すのはなぜですか?
- 14. IsMouseVisibleがfalseに設定されている場合でもマウスカーソルはウィンドウ上のモノゲームで隠されません。
- 15. Data Annotation 'Browsable'がFalseに設定されている列の値を取得する方法
- 16. コントロールが可視falseに設定されている、jQueryセレクターが失敗する
- 17. ScrollableControlをAutoScrollをfalseに設定して使用する方法
- 18. 内側のリストボックスアイテムが選択されているときに外側のリストボックスアイテムを選択する方法は?
- 19. Web2py 'Unique'制約がfalseに設定された後でも強制的に適用されています
- 20. プロパティがfalseに設定されているプロパティを持つフィールドから情報を取得する方法?
- 21. まだwebdriver.chrome.driverを取得しても、そのプロパティを設定しても例外が設定されません。
- 22. CookieSlidingExpirationがデフォルトでfalseに設定されているのはなぜですか?
- 23. clipChilrenをfalseに設定してもまだクリッピングする
- 24. aspNetCompatibilityEnabledがfalseに設定されているとWCF OneWayサービスが遅くなる
- 25. ボタンの原因妥当性チェックプロパティはfalseに設定されていますが、それでも有効です。
- 26. Submitボタンがクリックされたときにjqueryダイアログボックスを閉じる方法(Submitボタンがダイアログボックス内にある場合)
- 27. setCanceledOnTouchOutsideイベントによってDialogFragmentがキャンセルされたときにオンスクリーンキーボードを非表示にする方法
- 28. 外側のクリックで角を閉じる - 内側のクリックでも閉じます
- 29. Android - ダイアログの外側余白を設定する方法
- 30. ASP.NET - EnableViewStateがFalseに設定されている場合のグリッドビューデータの取得
通常のダイアログまたはアクティビティをダイアログとして使用していますか? – shadygoneinsane