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

前言

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

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

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

  • 返回back stack的上一个activity。

实现

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

setSupportActionBar(toolbar);
//这里提示可能会报出异常具体见下图
getSupportActionBar().setHomeButtonEnabled(true);
//设置toolbar后调用setDisplayHomeAsUpEnabled
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

使ActionBar(Toolbar)的Up导航和实体按键Back实现同步_第1张图片

  • 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();
    }

参考资料

  • NavUtils.navigateUpFromSameTask(this)
  • Which one to use NavUtils.navigateUpFromSameTask() vs. onBackPressed()

你可能感兴趣的:(android,toolbar)