安卓非自定义标题栏实现“返回”按钮

来源:互联网 发布:英伦风的男装品牌 知乎 编辑:程序博客网 时间:2024/06/05 19:39

按钮效果如下图“图标+标题+箭头”所示,点击后能返回之前调用它的Activity,这并不是自定义按钮,而是使用了安卓的一些特殊方法生成的,很多人或许不知道这个隐秘的功能,下面我来介绍下:

在默认的情况下,应用程序图标显示在操作栏的左边。你能够把这个图标当做操作项来使用,应用程序可以在这个图标上响应以下两个操作其中之一:

     <1> 返回应用程序的“主”Activity;

     <2> 向应用程序上级页面导航。



方法一:安卓4.1以后,添加了android:parentActivityName属性,添加这个属性后,即可出现图所示按钮,属性的值为该Activity声明了一个父Activity

注意:这个属性所要求的SDK版本最低为16,通过Activity左上角的返回按钮点击返回,启动声明的父Activity,总会先调用父Activity的OnDestroy方法

 <uses-sdk
        android:minSdkVersion="16"
        android:targetSdkVersion="21" />

<activity android:name=".OtherActivity"
            android:parentActivityName=".MainActivity"></activity>

方法二: 要实现应用程序图标能够向上导航,首先就要在你的ActionBar中调用SetDisplayHomeAsUpEnabledtrue(true)

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_show);
//显示菜单栏返回键
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

......

}

  当用户触摸这个图标时,系统会调用Activity带有android.R.id.home ID的onOptionsItemSelected()方法。在这个响应中,你既可以启动主Activity,也可以返回你的应用程序结构化层次中用户上一步操作的界面。

   如果你要通过应用程序图标的响应来返回主Activity,那么就应该在Itent对象中包括FLAG_ACTIVITY_CLEAR_TOP标识。用这个标记,如果你要启动的Activity在当前任务中已经存在,那么,堆栈中这个Activity之上的所有的Activity都有被销毁,并且把这个Activity显示给用户。添加这个标识往往是重要的,因为返回主Activity相当与一个回退的动作,因此通常不应该再创建一个新的主Activity的实例,否则,最终可能会在当前任务中产生一个很长的拥有多个主Activity的堆栈。

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//菜单栏返回键功能
case android.R.id.home:
Intent intent = new Intent(this, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

这样就实现了一个返回功能。





1 0