使ActionBar(Toolbar)的Up导航和实体按键Back实现同步

这篇博客探讨了在Android开发中如何使Toolbar的Up导航与设备的实体Back按键功能保持同步,确保两者在返回操作上的一致性。作者强调了在Toolbar中启用和配置返回图标的重要性,并提供了具体的代码示例来实现这一功能。同时,还提到了在不同Android版本中实现此功能的差异以及如何处理Toolbar的标题设置问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

android的toolbar的返回键有必要存在吗?
google自家应用也保留了toolbar的返回键。 觉得和下方的实体返回键重了。

不管什么原因大众的使用习惯就是这样,
所以呢在开发过程中就会有了toolbar的返回和实体返回键都要实现的问题
而且要基本功能相同,这就有了功能同步的问题。

  • 官方中把Toolbar中的那个返回键不叫做返回键 ,而叫做Up功能是返回该app的逻辑层级的上一层,即parentActivity
    详细见Navigation with Back and Up

  • 返回back stack的上一个activity。

实现

要想ActionBar或者toolbar显示出home来需要调用如下代码

//在onCreate()内部,通过setSupportActionBar()向Activity传递布局内Toolbar的引用
setSupportActionBar(toolbar);
//这里提示可能会报出异常具体见下图
getSupportActionBar().setHomeButtonEnabled(true);
//设置toolbar后调用setDisplayHomeAsUpEnabled
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

异常提示

  • setHomeButtonEnabled这个小于4.0版本的默认值为true的。但是在4.0及其以上是false,
    该方法的作用:决定左上角的图标是否可以点击。没有向左的小图标。 true 图标可以点击 false 不可以点击。
  • setDisplayHomeAsUpEnabled(true)
    给左上角图标的左边加上一个返回的图标 。对应ActionBar.DISPLAY_HOME_AS_UP
  • setDisplayShowHomeEnabled(true)
    使左上角图标是否显示,如果设成false,则没有程序图标,仅仅就个标题,否则,显示应用程序图标,对应id为android.R.id.home,对应ActionBar.DISPLAY_SHOW_HOME
  • setDisplayShowCustomEnabled(true)
    使自定义的普通View能在title栏显示,即actionBar.setCustomView能起作用,对应ActionBar.DISPLAY_SHOW_CUSTOM
  • setDisplayShowTitleEnabled(true)
    对应ActionBar.DISPLAY_SHOW_TITLE

其中setHomeButtonEnabledsetDisplayShowHomeEnabled共同起作用,如果setHomeButtonEnabled设成false,即使setDisplayShowHomeEnabled设成true,图标也不能点击

接着配置AndroidManifest.xml
在Android 4.1上,只需要声明该activity的parentActivity即可。
在Android 4.0及之前的版本上,需要include Support Library,然后添加相应的<meta-data>

<application ... >  
    ...  
    <!-- The main/home activity (it has no parent activity) -->  
    <activity  
        android:name="com.example.MainActivity" ...>  
        ...  
    </activity>  
    <!-- A child of the main activity -->  
    <activity  
        android:name="com.example.ActivityB"  
        android:parentActivityName="com.example.MainActivity" >  
        <!-- Parent activity meta-data to support 4.0 and lower -->  
        <meta-data  
            android:name="android.support.PARENT_ACTIVITY"  
            android:value="com.example.MainActivity" />  
    </activity>  
</application>  

接下来在代码中直接使用如下的的方法就可以了

  • ActionBar的Up 这段在配置文件中配置了可以不用
    @Override  
    public boolean onOptionsItemSelected(MenuItem item) {  
        switch (item.getItemId()) {  
            // Respond to the action bar's Up/Home button  
            case android.R.id.home:  
            NavUtils.navigateUpFromSameTask(this);  
            return true;  
        }  
        return super.onOptionsItemSelected(item);  
    } 
  • 返回键调用的
    @Override
    public void onBackPressed() {
        NavUtils.navigateUpFromSameTask(this);
        super.onBackPressed();
    }

参考资料

Toolbar设置标题的问题

在使用Toolbar时,如果需要修改标题必须在onCreate()方法执行完成之后修改。因为在onCreate()方法中设置任何标题值都会被重置为AndroidManifestandroid:lable的值。为了抵消这种行为,我们可以在onCreate()执行之后执行的onPostCreate()方法中执行修改标题的。

    /**
     * Called when activity start-up is complete (after onStart() and onRestoreInstanceState(Bundle) have been called).
     *
     * @param savedInstanceState
     */
    @Override
    public void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        //Toolbar 必须在onCreate()之后设置标题文本,否则默认标签将覆盖我们的设置
        if (toolbar != null) {
            toolbar.setTitle("零钱");
            toolbar.setSubtitle("微信安全支付");
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值