Активность прозрачный фон главного экрана не последняя активность

#android #android-activity

#Android #android-активность

Вопрос:

Я запускаю действие из android.intent.action.НАМЕРЕНИЕ вызова. Я хотел бы показать макет, похожий на диалоговое окно с ходом выполнения, с прозрачным фоном (пока я выполняю обработку перед передачей в родную программу набора номера). Но за видимым фоном должен быть домашний экран.

На данный момент активность загружается нормально, и фон за пределами желаемого диалогового окна загрузки прозрачный, но вместо главного экрана в фоновом режиме отображается последний экран приложения / действие.

Как я могу заставить фон за моим прозрачным экраном быть домашним экраном?

Ответ №1:

Для того, чтобы сделать это, просто установите для темы Android в вашем файле манифеста значение ‘Theme.Обои’

то есть: <activity android:theme="@android:style/Theme.Wallpaper" />

Также убедитесь, что вы установили прозрачный фон для своей активности. Например, я определил полупрозрачный черный цвет, который я использую в качестве фона для своей активности:

 <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="translucent_black">#CF000000</color>
</resources>
  

Комментарии:

1. блестящий, работает отлично. единственное изменение, которое я сделал, это использовал android: background =»@android: color / transparent» для макета активности вместе с добавлением темы в манифест

Ответ №2:

попробуйте launchMode=»singleInstance» в вашем манифесте 😉

Ответ №3:

Вы не можете заставить его быть начальным экраном, но вы можете взять текущие обои и использовать их в качестве фона.

 @Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    Drawable wallpaper = WallpaperManager.getInstance(this).getDrawable();
    // Set wallpaper to the background of the root view
}
  

Комментарии:

1. К сожалению, не работает, если устройство использует живые обои, вместо них отображаются обои по умолчанию.

2. Хммм, это отстой. Кажется, что живые обои запускаются как сервис. Возможно, вам удастся привязаться к текущей службе. developer.android.com/reference/android/service/wallpaper /…

Ответ №4:

Во-первых, вы не должны изменять стек активности за пределами вашего приложения, большой нет, нет.

Во-вторых, получение широковещательной рассылки приведет к тому, что другие приложения будут запускаться на переднем плане некоторое время (кроме главного экрана). Так что вам придется просто смириться с тем, что так и будет.

Вы можете либо отобразить диалоговое окно и использовать тему диалога, чтобы фоновая активность, пока она еще есть, была слегка затемнена, либо пойти другим путем и просто показать полную активность.

Ответ №5:

Один из вариантов (который настоятельно не рекомендуется) — отключить все другие видимые процессы. Этот код позаботится об этом:

 import java.util.List;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.content.Context;
import android.util.Log;

public class Test {
public Test(Context c){
    ActivityManager am = (ActivityManager)c.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> list = am.getRunningAppProcesses();
    for (int i=0; i<list.size(); i  ){
        Log.i("apps info", list.get(i).processName  "; PID="   list.get(i).pid);
        if(list.get(i).importance == RunningAppProcessInfo.IMPORTANCE_VISIBLE){
            android.os.Process.killProcess(list.get(i).pid);
        }
    }
  }
}
  

Как указано выше, этого следует избегать. Этот тип кода лучше всего зарезервировать для приложения диспетчера задач.

Комментарии:

1. Убивать ВСЕ другие процессы по простым косметическим причинам — плохая идея.

2. Он просит решение. Это не обязательно лучший вариант, но он может помочь ему в правильном направлении. То, что вы не согласны с ответом, не означает, что это плохой ответ, особенно когда я предоставляю рабочий код.

Ответ №6:

используйте эту тему в своем стиле

 <style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation</item>
</style>