gpt4 book ai didi

android - 防止 "Dialog"Activity在点击边界外时与后台Activity交互

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:08 25 4
gpt4 key购买 nike

我正在创建一个看起来像对话框的 Activity 。

样式如下:

<style name="TablesDialogActivity" parent="@android:style/Theme.Holo.Dialog">
<item name="android:windowBackground">@drawable/frame_background_left</item>
</style>

这是 onCreate() Activity :

protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL);
getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
super.onCreate(savedInstanceState);
}

还有在 Activity 触摸拦截器中:

@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
finish();
return true;
}
return false;
}

它非常有效, Activity 在对话框边界外触摸时完成,但它也与后台 Activity 上的按钮交互,这很糟糕。 onTouchEvent 的文档说,如果您使用了触摸事件,您应该返回 true。我返回 true,但似乎并非如此。

最佳答案

嗯..有趣)
在我的应用程序中,我使用 fragment ,所以我使用 DialogFragment 而不是 Dialog。
我创建了安全显示对话框方法

private static void showDialog(FragmentManager fragmentManager, String dialogTag, BeamDialogData data) {

FragmentTransaction ft = fragmentManager.beginTransaction();
ft.commit();
fragmentManager.executePendingTransactions();
Fragment prev = fragmentManager.findFragmentByTag(dialogTag);
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);

BeamDialog beamDialog = new BeamDialog();
beamDialog.setData(data);
beamDialog.show(fragmentManager, dialogTag);
}

public static void showDialogSafe(final FragmentManager fragmentManager, final String dialogTag,
final BeamDialogData data, Handler handler) {
handler.post(new Runnable() {
@Override
public void run() {
showDialog(fragmentManager, dialogTag, data);
}
});
}

BeamDialog 是我自定义的 DialogFragment
所以没有背景点击)我希望这对你有用)

关于android - 防止 "Dialog"Activity在点击边界外时与后台Activity交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23126701/

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