2013-10-24 15 views
0

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

我认为这是关系到:

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

,我已经把我的主要活动。我该如何解决这个错误,但保持不显示任何东西的效果,直到应用程序加载(如Quora)?

编辑:我刚刚测试过,当用android:theme="@android:style/Theme.NoTitleBar"代替这行时,这个bug已经不在这里了;但现在当应用程序启动时,会有黑屏闪烁。 (这就是为什么我把translucent

+0

你打开一个活动,然后开始另一个活动?你看到的黑屏是由你的应用程序中的东西绘制的。 –

回答

1

你要么有一个透明的背景或没有。意味着应用程序背景在启动和停止时是透明的。

正如你希望你的背景在开始时是透明的,但现在不再了,你可以创建一个仅仅是透明的(初始)fill_parent矩形并具有普通主题的(初始)屏幕。

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

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

下面是一些代码来说明。

首先,飞溅的布局:

<?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(); 
    } 
} 

测试你可能想添加一些等待你开始实际应用活动,看到启动前一会儿。

+0

你可以请把更多的细节,我怎么可以把背景透明只有在开始。 – Mageek

+0

工作正常!非常感谢 – Mageek

+0

你为什么要在PostResume上开始活动?我试过它创建,它似乎工作正常 – Mageek

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在加载时你不应该有一个完全透明的应用程序 - 用户需要立即反馈他们已经成功激活你的应用程序图标。