【问题标题】:Why is the up button present without setDisplayHomeAsUpEnabled()?为什么在没有 setDisplayHomeAsUpEnabled() 的情况下出现向上按钮?
【发布时间】:2026-02-06 11:45:01
【问题描述】:

根据Google's document,需要getActionBar().setDisplayHomeAsUpEnabled(true) 才能显示向上按钮。我使用 Eclipse 中的向导创建了一个基本活动,并指定了它的父活动。我在自动生成的代码中找不到任何getActionBar().setDisplayHomeAsUpEnabled(true),但是当这个活动开始时向上按钮出现并且它按预期工作。有人可以对此有所了解吗?

public class FooActivity extends ActionBarActivity {

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

            //more code...    
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
            //more code...  
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            //more code...  
            return rootView;
        }
    }

}

【问题讨论】:

    标签: android android-activity android-actionbar


    【解决方案1】:

    当您在AndroidManifest 中指定parentActivityName 时,Acitivty will check for that and automatically enable the "up" affordance if it's present.

    【讨论】:

    • 非常感谢您的及时答复。这是否意味着文档错误(即 getActionBar().setDisplayHomeAsUpEnabled(true) 是多余的),或者在某些情况下需要这样的调用才能显示向上按钮?
    • 我不会称其为“错误”,但它可能会被改写为更清楚一点。它确实声明“这样做允许系统促进导航模式,例如向上......”关于添加parentActivityName。但在您的情况下,调用ActionBar.setDisplayHomeAsUpEnabled 是多余的。
    • 是否有需要setDisplayHomeAsUpEnabled的情况?我问这个是因为我想确保添加 parentActivityName 是我需要做的所有事情,以便为数千种不同型号的 Android 设备提供向上按钮。文档看了好几遍,给我的感觉是添加parentActivityName是“第一步”(引用自文档),第二步是调用setDisplayHomeAsUpEnabled。似乎还有第三步。抱歉,我对文档的理解有限。
    • @Hong 不,这可以理解。说添加parentActivityName 是“第一步”,有点误导。但是,只要您拥有该属性,它就会自动为您处理“向上”的可供性。 Here's a link to the AppCompat source, where the same check is performed for ActionBarActivity too
    • 感谢您的进一步解释。我将忽略 setDisplayHomeAsUpEnabled ,除非我发现向上按钮在某种情况下不起作用。我对这些事情有点小心的原因是,我以一种艰难的方式了解到,某些代码适用于某些 Android 设备,但不适用于其他设备。我不会针对每个应用程序更新的每个表单的每个 Android 版本进行测试,所以我一直保持公平。
    【解决方案2】:

    我在下面描述了所有可能的组合及其结果:

    1. 你同时拥有android:parentActivityName=".MyActivity和这个getActionBar().setDisplayHomeAsUpEnabled(true); - 后退按钮出现并且有效;
    2. 你只有这个android:parentActivityName=".MyActivity - 后退按钮出现并且可以工作,同上;
    3. 你只有这个getActionBar().setDisplayHomeAsUpEnabled(true);, - 出现后退按钮,但点击它不会去任何地方;
    4. 您已在此 getActionBar().setDisplayHomeAsUpEnabled(false); 中将参数设置为 false,即使清单中有此 android:parentActivityName=".MyActivity,后退按钮也不显示。

    我的朋友就是这样。

    【讨论】:

      最近更新 更多