我有一个使用对话框主题的活动,当有人在此活动窗口之外的任何地方触摸屏幕时,我想关闭(结束)这个活动。我该如何实现?
我有一个使用对话框主题的活动,当有人在此活动窗口之外的任何地方触摸屏幕时,我想关闭(结束)这个活动。我该如何实现?
使用方法setFinishOnTouchOutside
来启用/禁用外部是否可触摸。
这适用于活动。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_yoptions);
/* your code here */
// set outside touchable
this.setFinishOnTouchOutside(true);
}
对于那些希望在触摸对话框外部时不关闭对话框应用程序的人。请添加此行。
this.setFinishOnTouchOutside(false);
它不会关闭对话框
只需将此项添加到styles.xml
中:
<style name="alert_dialog" parent="android:Theme.Dialog">
<item name="android:windowIsFloating">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowBackground">@color/float_transparent</item>
<item name="android:windowAnimationStyle">@null</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:backgroundDimAmount">0.4</item>
</style>
onCreate()
和setContentView
之前:
setTheme(R.style.alert_dialog);
一个Activity有dispatchTouchEvent方法,可以使用它
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
// TODO Auto-generated method stub
finish();
return super.dispatchTouchEvent(ev);
}
只需使用此主题。点击屏幕外部即可关闭该活动。
<style name="DialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog">
<item name="android:windowIsTranslucent">true</item>
</style>
Kotlin 版本适合我
alert.setOnDismissListener(DialogInterface.OnDismissListener() {
it.dismiss()
})