当用户需要知道重要事项时,我会在所有活动的角落添加一个通知图标。我有它工作,除了它阻止微调器,对话框和EditText工作。旋转器似乎工作,除了你看不到它们,就像你触摸它,然后再次触摸,选择一个选项,但不会出现微调器对话框。
其他活动扩展的基本活动:
public abstract class LoggedInActivity
extends GaugesActivity
{
private static final String TAG = "LoggedInActivity";
private WindowManager wm;
private boolean overlayCreated = false;
private LinearLayout mOverlay;
private ImageView mOverlayImageView;
@Override
protected void onResume(){
super.onResume();
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
SharedPreferences prefs = getSharedPreferences(PREFS_NAME, MODE_PRIVATE);
String duplicateTruckGuid = prefs.getString("duplicateTruckGuid", "");
if (! duplicateTruckGuid.isEmpty()){
createOverlay();
}
}
protected void createOverlay(){
if (overlayCreated) return;
// Create System overlay
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, // WindowManager.LayoutParams.TYPE_APPLICATION_PANEL,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.BOTTOM;
params.token = getWindow().getDecorView().getRootView().getWindowToken();
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
mOverlay = (LinearLayout) inflater.inflate(R.layout.overlay_notification, null);
// mOverlayImageView = (ImageView) mOverlay.findViewById(R.id.overlay_notification_image);
try {
wm.addView(mOverlay, params);
final Context context = this;
mOverlay.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Intent intent = new Intent(context, NotificationsActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
}
});
}
catch (Exception e){
Log.e(TAG, e.toString());
Log.i(TAG, e.toString());
Toast.makeText(this, e.toString(), Toast.LENGTH_SHORT).show();
}
}
overlay_notification.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:background="@drawable/black_transparent_overlay">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/overlay_notification_image"
android:src="@drawable/ic_warning_active"
android:layout_margin="@dimen/normal_padding"/>
</LinearLayout>
答案 0 :(得分:1)
您可以使用TYPE_SYSTEM_ERROR
代替TYPE_SYSTEM_ALERT
。
此外,FLAG_NOT_TOUCH_MODAL
已隐式设置FLAG_NOT_FOCUSABLE
,因此您无需手动添加。{/ p>
但是,我建议您考虑CommonsWare指出的替代方案。