gpt4 book ai didi

android - 像 any.do 一样的弹出窗口

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

我正在编写一个在弹出窗口中显示未接来电和未读短信的应用程序。它还具有提醒功能(关闭弹出窗口并在指定时间后打开它)。类似于any.do的弹窗。

我能够通过使用 WindowManger 创建这样一个窗口,但是由于一些我目前还不明白的原因,弹出窗口会在一段时间后消失(尽管它应该打开直到用户关闭它,或者点击可能需要几个小时的提醒按钮)。

这就是我创建现有弹出窗口的方式

windowManager = (WindowManager) context.getApplicationContext()
.getSystemService(Context.WINDOW_SERVICE);
this.inflater = LayoutInflater.from(context);
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
+ WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
+ WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.BOTTOM;
vgPopupWindow = (ViewGroup) LayoutInflater.from(context).inflate(R.layout.popup_mainwindow, null);
vgPopupContent = (ViewFlipper) vgPopupWindow.findViewById(R.id.popup_content);
vgPopupAreaContent = (ViewGroup) vgPopupWindow.findViewById(R.id.popup_area_content);
vgPopupAreaActions = (ViewGroup) vgPopupWindow.findViewById(R.id.popup_area_actions);
vgPopupTabs = (LinearLayout) vgPopupWindow.findViewById(R.id.popup_tabs);
vgPopupHeader = (LinearLayout) vgPopupWindow.findViewById(R.id.popup_main_header);
windowManager.addView(vgPopupWindow, params);

因为我不确定 WindowManager 是否真的是正确的方法,所以我也尝试对具有以下样式的 Activity 做同样的事情

<style name="PopupWindow" parent="CustomTheme">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowIsTranslucent">true</item>

它现在看起来就像 WindowManager 版本,但有一个问题:我无法访问它下面的我的应用程序窗口,因为窗口的半透明部分看起来很完美,但是阻止了下面窗口的任何点击事件,所以我不能滚动它或用它做任何事情。就像在 any.do 中一样,我只想显示该窗口,但不阻止在弹出窗口打开时在下面的窗口上工作的任何可能性。

编辑:我想在底部看到弹出窗口,覆盖窗口的 30%,但能够同时滚动它下面的窗口(并在其上执行点击事件)。

所以我的问题是:

  1. WindowManager 是创建此弹出窗口的正确方法吗?
  2. 如果是,为什么它有时会在不需要时消失?我该如何预防?
  3. 如果不是,我如何创建一个行为类似于我使用 WindowManager 创建的窗口的 Activity ?
  4. 或者两种方式都错了?在这种情况下;什么是正确的方法?

最佳答案

这是我用来做同样事情的代码

public class PopupActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AlertDialog.Builder adb = new Builder(this);
AlertDialog dialogTest = adb.setTitle("Test title")
.setMessage("Test message")
.setNeutralButton("Button", new OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// do something
PopupActivity.this.finish();
}
}).create();
adb.setCancelable(false);
dialogTest.show();
}
}

和 XML 样式(最初发布于此 https://stackoverflow.com/a/2700683/995020 )

<style name="Theme.Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>

在 list 文件中设置 Activity 的样式。然后只要您想显示弹出窗口,就可以开始 Activity 。您可以向 Intent 添加额外数据并将其用于自定义弹出窗口。

关于android - 像 any.do 一样的弹出窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19146392/

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