活动在我的清单中声明为:

    <activity
        android:name=".TicketingHomeActivity"
        android:label="@string/title_activity_ticketing_home"
        android:parentActivityName=".HomeActivity" />


如何以编程方式获取android:parentActivityName的值?

我需要这样做,因为我刚刚用工具栏替换了ActionBar,但是即使清单中未设置parentActivityName属性,getSupportActionBar().setDisplayShowHomeEnabled(true)现在仍在活动中显示向上箭头。因此,我想在我的BaseActivity中检测是否未设置parentActivityName,因此可以相应地隐藏“向上”箭头。

注意:此问题不是this question的重复,因为我专门询问如何以编程方式检测android:parentActivityName属性的值。

最佳答案

您可以在BaseActivity上调用getParentActivityIntent()

它将返回一个Intent。然后,您可以调用getComponent(),它将返回一个ComponentName,您可以从其中获取android:parentActivityName(类名)。

编辑

代码示例:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    if (toolbar != null) {

        toolbar.setTitle(getTitle());

        Intent parentActivityIntent = getParentActivityIntent();
        boolean doesParentActivityExist;
        if (parentActivityIntent == null) {
            doesParentActivityExist = false;
        }
        else {
            ComponentName componentName = parentActivityIntent.getComponent();
            doesParentActivityExist = (componentName.getClassName() != null);
        }
        //toolbar.setSubtitle("Has parent: " + doesParentActivityExist);

        setSupportActionBar(toolbar);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null && doesParentActivityExist) {

            actionBar.setDisplayHomeAsUpEnabled(doesParentActivityExist);
            actionBar.setHomeButtonEnabled(doesParentActivityExist);

            actionBar.setDefaultDisplayHomeAsUpEnabled(doesParentActivityExist);
            actionBar.setDisplayShowHomeEnabled(doesParentActivityExist);

        }
    }

07-24 09:33