在工具栏Android上显示后退箭头

我从我的应用程序从ActionBar迁移到Toolbar 。 但是我不知道如何在Toolbar上的Back Arrow上显示和设置点击事件,就像我在Actionbar上做的Actionbar
在这里输入图像说明

ActionBar ,我打电话给mActionbar.setDisplayHomeAsUpEnabled(true) 。 但是没有类似的方法。

有没有人曾经遇到这种情况,并以某种方式find解决办法?

如果您使用的是ActionBarActivity那么您可以告诉Android使用Toolbar作为ActionBar如下所示:

 Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); setSupportActionBar(toolbar); 

然后来电

 getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); 

将工作。 你也可以在连接到ActionBarActivities碎片中使用它,你可以像这样使用它:

 ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); ((ActionBarActivity) getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true); 

如果您没有使用ActionBarActivities或者您想要获取未设置为SupportActionBarToolbar上的后退箭头,则可以使用以下方法:

 mActionBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_action_back)); mActionBar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //What to do on back clicked } }); 

如果您使用的是android.support.v7.widget.Toolbar ,则应将以下代码添加到您的AppCompatActivity

 @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } 

我看到很多答案,但这是我之前没有提到的。 它从API 8+起作用。

 public class DetailActivity extends AppCompatActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_detail); // toolbar Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); // add back arrow to toolbar if (getSupportActionBar() != null){ getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } } @Override public boolean onOptionsItemSelected(MenuItem item) { // handle arrow click here if (item.getItemId() == android.R.id.home) { finish(); // close this activity and return to preview activity (if there is any) } return super.onOptionsItemSelected(item); } 

你可以使用工具栏的setNavigationIcon方法。 Android文档

 mToolBar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha); mToolBar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { handleOnBackPress(); } }); 

有很多方法可以做到,这里是我的最爱:

布局:

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:navigationIcon="?attr/homeAsUpIndicator" /> 

活动:

  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // back button pressed } }); 

如果你使用的是AppCompatActivity并没有使用它,因为你不想使用它提供的自动ActionBar ,因为你想分离出Toolbar ,因为你的Material Design需求和CoordinatorLayout或者AppBarLayout , ,考虑一下:

您仍然可以使用AppCompatActivity ,您不需要停止使用它,以便您可以在xml中使用<android.support.v7.widget.Toolbar> 。 只需closures操作栏样式 ,如下所示:

首先,从您在styles.xml喜欢的NoActionBar主题之一派生一个样式,我使用Theme.AppCompat.Light.NoActionBar如下所示:

 <style name="SuperCoolAppBarActivity" parent="Theme.AppCompat.Light.NoActionBar"> <item name="colorPrimary">@color/primary</item> <!-- colorPrimaryDark is used for the status bar --> <item name="colorPrimaryDark">@color/primary_dark</item> ... ... </style> 

在您的应用程序清单中,select您刚定义的子样式主题,如下所示:

  <activity android:name=".activity.YourSuperCoolActivity" android:label="@string/super_cool" android:theme="@style/SuperCoolAppBarActivity"> </activity> 

在你的Activity Xml中,如果工具栏是这样定义的:

 ... <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" /> ... 

然后,这是最重要的部分,您支持Action栏设置为您正在扩展的AppCompatActivity,以便xml中的工具栏成为操作栏。 我觉得这是一个更好的方法,因为你可以简单地做许多事情,比如菜单,自动活动标题,项目select处理等,而不需要添加自定义点击处理程序等。

在您的Activity的onCreate覆盖中,执行以下操作:

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_super_cool); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); //Your toolbar is now an action bar and you can use it like you always do, for example: getSupportActionBar().setDisplayHomeAsUpEnabled(true); } 
  Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); toolbar.setNavigationIcon(R.drawable.back_arrow); // your drawable toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { onBackPressed(); // Implemented by activity } }); 

而对于API 21+ android:navigationIcon

 <android.support.v7.widget.Toolbar android:navigationIcon="@drawable/back_arrow" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize"/> 

我使用了Google Developer Documentation中的这个方法:

 @Override public void onCreate(Bundle savedInstanceState) { ... getActionBar().setDisplayHomeAsUpEnabled(true); } 

如果你得到一个空指针exception,它可能取决于主题。 尝试在清单中使用不同的主题,或者使用此替代方法:

 @Override public void onCreate(Bundle savedInstanceState) { ... getSupportActionBar().setDisplayHomeAsUpEnabled(true); } 

然后在清单中,我为当前活动设置父级活动:

 <activity android:name="com.example.myapp.MyCurrentActivity" android:label="@string/title_activity_display_message" android:parentActivityName="com.example.myfirstapp.MainActivity" > <!-- Parent activity meta-data to support 4.0 and lower --> <meta-data android:name="android.support.PARENT_ACTIVITY" android:value="com.example.myapp.MyMainActivity" /> </activity> 

我希望这能帮到您!

如果你不想创build一个自定义的Toolbar ,你可以这样做

 public class GalleryActivity extends AppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { ... getSupportActionBar().setTitle("Select Image"); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { finish(); } } } 

在你的AndroidManifest.xml

 <activity android:name=".GalleryActivity" android:theme="@style/Theme.AppCompat.Light" > </activity> 

你也可以把这个android:theme="@style/Theme.AppCompat.Light"放到<aplication> android:theme="@style/Theme.AppCompat.Light" <aplication>标签中,应用于所有的活动

在这里输入图像说明

 MyActivity extends AppCompatActivity { private Toolbar toolbar; @Override protected void onCreate(Bundle savedInstanceState) { ... toolbar = (Toolbar) findViewById(R.id.my_toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); toolbar.setNavigationOnClickListener(arrow -> onBackPressed()); } 

这工作完美

 public class BackButton extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chat_box); Toolbar chatbox_toolbar=(Toolbar)findViewById(R.id.chat_box_toolbar); chatbox_toolbar.setTitle("Demo Back Button"); chatbox_toolbar.setTitleTextColor(getResources().getColor(R.color.white)); setSupportActionBar(chatbox_toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayShowHomeEnabled(true); chatbox_toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Define Back Button Function } }); } } 

在您想要添加后退button的活动的清单文件中,我们将使用属性android:parentActivityName

  <activity android:name=".WebActivity" android:screenOrientation="portrait" android:parentActivityName=".MainActivity" /> 

PS此属性是在API级别16中引入的。