问题 为什么没有setDisplayHomeAsUpEnabled()时出现向上按钮?


根据 谷歌的文件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;
        }
    }

}

2967
2018-04-02 13:15


起源



答案:


指定时 parentActivityName 在你的 AndroidManifestAcitivty  将检查并自动启用“向上”可供件,如果它存在。


13
2018-04-02 13:18



非常感谢您的快速回答。这是否意味着文档是错误的(即getActionBar()。setDisplayHomeAsUpEnabled(true)是多余的),或者有些情况需要这样的调用才能显示向上按钮? - Hong
我不会称之为“错误”,但它可能会被改写为更加清晰。它确实声明“这样做允许系统促进导航模式,例如Up ...”关于添加a parentActivityName。但在你的情况下,打电话是多余的 ActionBar.setDisplayHomeAsUpEnabled。 - adneal
是否需要setDisplayHomeAsUpEnabled?我问这个是因为我想确保添加一个parentActivityName是我需要做的就是为数千种不同型号的Android设备提供up按钮。我已多次阅读该文档,它给我的印象是添加parentActivityName是“第一步”(引自文档),第二步是调用setDisplayHomeAsUpEnabled。似乎甚至还有第三步。对于我对该文件的有限理解,我感到很抱歉。 - Hong
@Hong不,这是可以理解的。说添加 parentActivityName 是“第一步”,有点误导。但只要你有这个属性,它就会自动为你提供“向上”的支持。 这是AppCompat源的链接,其中执行相同的检查 ActionBarActivity 太 - adneal
感谢您的进一步解释。我将忽略setDisplayHomeAsUpEnabled,除非我发现up按钮在某种情况下不起作用。我对这些事情有点小心的原因是我已经以一种艰难的方式学习了某些代码适用于某些Android设备并不适用于其他设备。我没有测试每个应用更新的每个表单的每个Android版本,所以我有这个不变的公平。 - Hong


答案:


指定时 parentActivityName 在你的 AndroidManifestAcitivty  将检查并自动启用“向上”可供件,如果它存在。


13
2018-04-02 13:18



非常感谢您的快速回答。这是否意味着文档是错误的(即getActionBar()。setDisplayHomeAsUpEnabled(true)是多余的),或者有些情况需要这样的调用才能显示向上按钮? - Hong
我不会称之为“错误”,但它可能会被改写为更加清晰。它确实声明“这样做允许系统促进导航模式,例如Up ...”关于添加a parentActivityName。但在你的情况下,打电话是多余的 ActionBar.setDisplayHomeAsUpEnabled。 - adneal
是否需要setDisplayHomeAsUpEnabled?我问这个是因为我想确保添加一个parentActivityName是我需要做的就是为数千种不同型号的Android设备提供up按钮。我已多次阅读该文档,它给我的印象是添加parentActivityName是“第一步”(引自文档),第二步是调用setDisplayHomeAsUpEnabled。似乎甚至还有第三步。对于我对该文件的有限理解,我感到很抱歉。 - Hong
@Hong不,这是可以理解的。说添加 parentActivityName 是“第一步”,有点误导。但只要你有这个属性,它就会自动为你提供“向上”的支持。 这是AppCompat源的链接,其中执行相同的检查 ActionBarActivity 太 - adneal
感谢您的进一步解释。我将忽略setDisplayHomeAsUpEnabled,除非我发现up按钮在某种情况下不起作用。我对这些事情有点小心的原因是我已经以一种艰难的方式学习了某些代码适用于某些Android设备并不适用于其他设备。我没有测试每个应用更新的每个表单的每个Android版本,所以我有这个不变的公平。 - Hong


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

  1. 你们两个都有 android:parentActivityName=".MyActivity和这个 getActionBar().setDisplayHomeAsUpEnabled(true);  - 后退按钮出现,它的工作原理;
  2. 你只有这个 android:parentActivityName=".MyActivity  - 后退按钮出现,它起作用,与上面相同;
  3. 你只有这个 getActionBar().setDisplayHomeAsUpEnabled(true);, - 后退按钮出现,但点击它不会去任何地方;
  4. 您已将参数设置为false getActionBar().setDisplayHomeAsUpEnabled(false);,即使你有这个 android:parentActivityName=".MyActivity 在清单中,后退按钮不显示。

这就是我的朋友的工作方式。


3
2018-05-04 20:51