0

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

我认为这与:

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

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

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

4

2 回答 2

1

您要么有透明背景,要么没有。意味着应用程序的背景在启动和停止时都是透明的。

由于您希望您的背景在开始时透明但不再透明,您可以创建一个(某种)启动画面,它只是一个透明的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();
    }
}

对于测试,您可能希望在启动实际应用程序活动之前添加一些等待以查看启动片刻。

于 2013-10-26T10:53:43.653 回答
1

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

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

<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 的观点,即在加载时您不应该真正拥有一个完全透明的应用程序——用户想要一些即时反馈,表明他们已成功激活您的应用程序图标。

于 2013-10-26T16:06:43.383 回答