【问题标题】:Android start ActionBarActivity shows empty page firstAndroid启动ActionBarActivity先显示空页
【发布时间】:2014-03-27 07:42:47
【问题描述】:

我正在使用支持库 4 和 7。我正在按意图开始一项活动。那是ActionBarActivity,android.support.v7.app.actionbaractivity。

我遇到的问题是当我开始并显示一个新活动时。在我的活动显示之前,我得到一个带有这样的 android 徽标的空白活动。很难得到照片,但我认为它足以清楚地说明问题。

如何摆脱这种行为?

问题如下图所示。

1) 我的新活动开始加载。

2) 我的新活动即将加载完毕。

3) 我的新活动已加载。安卓图标现在不见了。

我以这种方式开始一项活动:

Intent intent = new Intent(this, SomeActivity.class);
startActivity(intent);

这就是我的配置在清单中的样子。

    <activity
        android:name="com.blah.bli.activities.SomeActivity"
        android:alwaysRetainTaskState="true"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:icon="@drawable/tidsam_logo"
        android:label="@string/empty_title"
        android:launchMode="singleInstance"
        android:theme="@style/Theme.AppCompat.Light" />

活动代码。首先,它们中的大多数都继承自此类,因为我需要一个注销功能,为此我需要跟踪用户上次活动的时间。我觉得下面没什么奇怪的。

活动量大,做的事很多

public class SuperActionBarActivity extends ActionBarActivity  {

    ApplicationExtension appState;

    @Override
    public void onUserInteraction(){
        appState.LastActive = Calendar.getInstance();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

         appState = ((ApplicationExtension )getApplicationContext());
         appState.LastActive = Calendar.getInstance();

    }


}

这是一个有问题的简单活动。

public class HelpActivity extends SuperActionBarActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_help);

        setActionBar();
    }

    // todo: create actionbar util class
    private void setActionBar() {
        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(R.layout.abs_layout);
        TextView login = (TextView) findViewById(R.id.abs_layout_login);
        login.setVisibility(View.INVISIBLE);

        FontUtils.applyFontAwesomeToControl(this, findViewById(R.id.abs_layout_back));
    }

    public void onClick(View v) {

        if (v == null) return;

        switch (v.getId()) {
        case R.id.abs_layout_back:
            onBackPressed();
            break;
        }

    }
}

【问题讨论】:

  • 显示 com.blah.bli.activities.SomeActivity 代码
  • 根据要求,我添加了其中一项活动的示例。

标签: android android-intent android-manifest android-support-library


【解决方案1】:

这是因为 Android 使用您在清单中设置的主题来创建“虚拟”活动,直到您的应用程序被加载。

在清单中设置自定义主题将加载与应用程序其余部分相同样式的虚拟活动,并使其不那么引人注目。

这里有一个如何做到这一点的教程:http://cyrilmottier.com/2013/01/23/android-app-launching-made-gorgeous/

【讨论】:

    猜你喜欢
    • 2012-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多