ric*_*ard 5 android android-intent android-layout android-windowmanager
我正在编写一个应用程序,在弹出窗口中显示未接来电和未读短信.它还有一个提醒功能(关闭弹出窗口并在指定时间后打开它).它类似于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);
Run Code Online (Sandbox Code Playgroud)
因为我不确定WindowManager是否真的是正确的方式,我也尝试对以下风格的活动做同样的事情
<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>
Run Code Online (Sandbox Code Playgroud)
它的外观现在就像WindowManager版本一样,但有一个问题:我无法访问它下面的应用程序窗口,因为窗口的半透明部分看起来很完美,但阻止任何点击事件到下面的窗口,这样我就可以不滚动它或做任何事情.就像在any.do中我只想要显示那个窗口,但是当弹出窗口打开时不阻止任何可能在下面的窗口上工作.
编辑:我想看到底部的弹出窗口,覆盖30%的窗口,但能够同时滚动它下面的窗口(并在其上执行点击事件).
所以我的问题是:
这是我用来做同样事情的代码
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();
}
}
Run Code Online (Sandbox Code Playgroud)
和 XML 样式(最初发布于此处/sf/answers/189047841/)
<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>
Run Code Online (Sandbox Code Playgroud)
在清单文件中设置活动的样式。然后只要您想显示弹出窗口就可以启动该活动。您可以将额外的数据添加到意图中并使用它来自定义弹出窗口。
| 归档时间: |
|
| 查看次数: |
1089 次 |
| 最近记录: |