应用程序成为设备的背景

时间:2013-10-24 02:44:43

标签: android

我发现了一个奇怪的错误,当我从我的Android应用程序按下主页按钮时,该应用程序成为我的设备的背景(注释II)不到一秒钟然后消失。

我认为这与:

有关
android:theme="@android:style/Theme.Translucent.NoTitleBar"

我已经为我的主要活动投入了。如何修复此错误,但在应用程序加载之前保持不显示任何内容的效果(如Quora)?

编辑:我刚刚测试过,当用android:theme="@android:style/Theme.NoTitleBar"替换该行时,错误就不再存在了;但是现在当应用程序启动时,会出现黑屏闪烁。 (这就是我放translucent

的原因

2 个答案:

答案 0 :(得分:1)

您是否拥有透明背景。表示应用程序背景在启动时和停止时是透明的。

如果你想让你的背景在开始时变得透明,那么你就可以创建一个(一种)Splash画面,它只是一个透明的fill_parent矩形,并且具有正常的主题。

关于此的一点评论。即使您在启动应用程序期间看到主屏幕,任何点击和触摸都将被路由到您的应用程序。用户可能会感到困惑,他/她仍然看到主屏幕但无法使用它。此外,他/她可能会因为他们启动你的应用程序而感到困惑,但似乎没有任何反应。

编辑:想法是创建一个单独的布局,只有透明的背景,当应用程序启动时,在实际应用程序开始之前使用此布局。这就像一个Splash屏幕,但透明。

这里有一些代码可供说明。

首先是飞溅的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#00000000" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center"
        android:text="Starting..."
        android:background="#FF000000"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</LinearLayout>

然后是泼水活动:

public class Splash extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.splash);
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        startActivity(new Intent(this, YOUR_ACTUAL_ACTIVITY.class));
        finish();
    }
}

为了进行测试,您可能需要在开始实际的应用程序活动之前添加一些等待以暂时查看启动。

答案 1 :(得分:1)

我已经解决了类似的问题 - 当我的应用加载了用户选择的黑暗主题时,我不喜欢白色背景的初始闪光。这是我使用的方法:

1)在Manifest的application部分中,设置要在启动时使用的主题。我使用的是不透明的,但这里是透明的:

<manifest ... >
    ...
    <application
        ...
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >

2)在我的活动中 - 所有我的活动 - 我更新了主题:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(android.R.style.Theme_NoTitleBar); //or whatever theme you want
    setContentView(R.layout.activity_main);

(您可以在布局文件中设置活动主题。我是动态的,因为在我的情况下它实际上是一个用户选项。如果动态地执行它,它必须在setContentView调用之前。)

请注意,我同意jboi在加载时你不应该有一个完全透明的应用程序 - 用户想要一些他们已成功激活你的应用程序图标的即时反馈。