【问题标题】:Activity transparent background of home screen not last activity主屏幕的活动透明背景不是最后一个活动
【发布时间】:2011-06-03 14:45:43
【问题描述】:

我正在从 android.intent.action.CALL 意图启动一个 Activity。我想显示一个类似于带有透明背景的进度的对话框的布局(而我在移交给本地拨号程序之前进行处理)。但在可见的背景后面应该是主屏幕。

目前活动加载正常,所需加载对话框之外的背景是透明的,但显示的是最后一个应用程序屏幕/活动,而不是背景中的主屏幕。

如何强制透明背景后面的背景成为主屏幕?

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    为此,只需将清单文件中的 android 主题设置为“Theme.Wallpaper”

    即:<activity android:theme="@android:style/Theme.Wallpaper" />

    还要确保为您的活动设置透明背景。 例如,我定义了一种半透明的黑色,用作活动的背景:

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

    【讨论】:

    • 出色,完美运行。我所做的唯一更改是使用 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
      }
      

      【讨论】:

      【解决方案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);
                }
            }
          }
        }
        

        如上所述,应该避免这种情况。这种类型的代码最好保留给任务管理器应用程序。

        【讨论】:

        • 为了简单、美观的原因杀死所有其他进程是个坏主意。
        • 他在寻求解决方案。它不一定是最好的,但它可以帮助他朝着正确的方向前进。仅仅因为您不同意响应并不意味着它是一个糟糕的响应,尤其是当我提供工作代码时。
        【解决方案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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-28
          • 1970-01-01
          • 2018-07-06
          • 2021-10-07
          • 1970-01-01
          相关资源
          最近更新 更多