在操作栏上显示后退按钮

我试图在Action bar上显示一个Back button来移动前一页/活动或到主页(第一次打开)。

我的代码。

ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);

代码在onCreate中。

351792 次浏览

奇迹发生在onOptionsItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
return true;
default:
return super.onOptionsItemSelected(item);
}
}

这是一个简单的返回按钮

actionBar.setDisplayHomeAsUpEnabled(true);

然后你可以自定义onOptionsItemSelected的回事件

case android.R.id.home:
this.finish();
return true;

官方解决方案

将这两个代码片段添加到您的SubActivity

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


@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);
}

增加meta-data和parentActivity来支持低sdk。

 <application ... >
...
<!-- The main/home activity (it has no parent activity) -->
<activity
android:name="com.example.myfirstapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
android:name="com.example.myfirstapp.SubActivity"
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.myfirstapp.MainActivity" />
</activity>
</application>

参考这里:http://developer.android.com/training/implementing-navigation/ancestral.html

试试这段代码,只在需要返回按钮时考虑它。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//YOUR CODE
getSupportActionBar().setDisplayHomeAsUpEnabled(true);


//YOUR CODE
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}

在你的onCreate方法中添加:

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

AndroidManifest.xml中定义父活动(一旦按下操作栏中的后退按钮将被调用的活动):

在清单上的<activity>定义中,添加以下一行:

android:parentActivityName="com.example.activities.MyParentActivity"
< p >试试这个, 在你的onCreate()

 getActionBar().setHomeButtonEnabled(true);
getActionBar().setDisplayHomeAsUpEnabled(true);

对于clickevent,

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; goto parent activity.
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

返回屏幕的代码。

@Override
public boolean onOptionsItemSelected(MenuItem item) {


switch (item.getItemId()) {


case android.R.id.home:


Toast.makeText(getApplicationContext(), "Home Clicked",
Toast.LENGTH_LONG).show();


// go to previous activity
onBackPressed();


return true;


}


return super.onOptionsItemSelected(item);
}

将这些行添加到onCreate()

android.support.v7.app.ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);

和onOptionItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
//Write your logic here
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

希望这将帮助你..!

我认为onSupportNavigateUp()是最好和最简单的方法,检查下面的步骤。第一步是必要的,第二步是可以选择的。

第一步显示后退按钮:onCreate()方法中添加这一行来显示返回按钮。

assert getSupportActionBar() != null;   //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true);   //show back button

步骤2实现后退点击:重写此方法

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

that it you are done
或步骤2可选:您可以在manifest文件中将meta添加到activity中作为

<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="MainActivity" />

编辑:如果你没有使用AppCompat活动,那么不要使用support词,你可以使用

getActionBar().setDisplayHomeAsUpEnabled(true); // In `OnCreate();`


// And override this method
@Override
public boolean onNavigateUp() {
finish();
return true;
}

感谢@atariguy的评论。

我知道上面有很多有用的解决方案,但这次我读了这篇文章(当前的Android Studio 2.1.2与sdk 23),上面的一些方法不起作用。

下面是我的解决方案的子活动是MapsActivity

首先,您需要添加parentActivity

AndroidManifest.xml

像这样:

<application ... >
...
<!-- Main activity (which has no parent activity) -->
<activity
android:name="com.example.myapp.MainActivity" ...>
...
</activity>
<!-- A child of the main activity -->
<activity
.....
android:parentActivityName=".MainActivity" >
<!-- Support Parent activity for Android 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.myapp.MainActivity" />
</activity>
</application>
其次,确保你的子活动扩展AppCompatActivity,而不是 FragmentActivity . < / p >

第三,重写onOptionsItemSelected()方法

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon action bar is clicked; go to parent activity
this.finish();
return true;
case R.id.action_settings:
return true;
default:
return super.onOptionsItemSelected(item);
}
}

希望这对你有所帮助!

我知道我有点晚了,但能够通过直接跟踪文档来修复这个问题。

将元数据标签添加到AndroidManifest.xml(这样系统就知道了)

 <activity
android:name=".Sub"
android:label="Sub-Activity"
android:parentActivityName=".MainChooser"
android:theme="@style/AppTheme.NoActionBar">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainChooser" />
</activity>

接下来,在你的MainActivity中启用back (up)按钮

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_child);
 

// my_child_toolbar is defined in the layout file
Toolbar myChildToolbar =
(Toolbar) findViewById(R.id.my_child_toolbar);
setSupportActionBar(myChildToolbar);
 

// Get a support ActionBar corresponding to this toolbar
ActionBar ab = getSupportActionBar();
 

// Enable the Up button
ab.setDisplayHomeAsUpEnabled(true);
}

然后,你就会被安排好了!

来源:Android开发者文档

我用这种方法求解

@Override
public boolean  onOptionsItemSelected(MenuItem item){
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}


@Override
public void onBackPressed(){
Intent backMainTest = new Intent(this,MainTest.class);
startActivity(backMainTest);
finish();
}
 public void initToolbar(){
//this set back button
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//this is set custom image to back button
getSupportActionBar().setHomeAsUpIndicator(R.drawable.back_btn_image);
}




//this method call when you press back button
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}

要做到这一点,只需两步,

步骤1:转到AndroidManifest.xml并在<activity>标记- android:parentActivityName=".home.HomeActivity"中添加此参数

例子:

<activity
android:name=".home.ActivityDetail"
android:parentActivityName=".home.HomeActivity"
android:screenOrientation="portrait" />

步骤2:在ActivityDetail中为上一页/活动添加你的action

例子:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}
return super.onOptionsItemSelected(item);
}
ActionBar actionBar=getActionBar();


actionBar.setDisplayHomeAsUpEnabled(true);


@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
}


return super.onOptionsItemSelected(item);
}

在onCreate方法中写入

Toolbar toolbar = findViewById(R.id.tool);
setSupportActionBar(toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
@Override
public void onBackPressed() {
super.onBackPressed();
startActivity(new Intent(ActivityOne.this, ActivityTwo.class));
finish();
}

这是XML文件

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark"
android:id="@+id/tool">

在styles。xml中把它改成

Theme.AppCompat.Light.NoActionBar

这就是我们要做的。

现在回答可能太迟了,但在我看来,我有一个更短、更实用的解决方案。

// Inside your onCreate method, add these.
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);


// After the method's closing bracket, add the following method exactly as it is and voiulla, a fully functional back arrow appears at the action bar
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}

在oncreate ();写这一行,>

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

然后在该类中实现下面的方法

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
// app icon in action bar clicked; go home
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}

这很简单,对我来说很有效

将此添加到onCreate()方法中

getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

将此添加到oncreate()方法外部

@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}

Manifest.xml

<activity
android:name=".Activity.SecondActivity"
android:label="Second Activity"
android:parentActivityName=".Activity.MainActivity"
android:screenOrientation="portrait"></activity>

在onCreate函数中添加以下代码:

getSupportActionBar () .setDisplayHomeAsUpEnabled(真正的);

然后覆盖: @Override onOptionsItemSelected(菜单项){ onBackPressed (); 返回true; } < / p >

onCreate()方法中添加这一行

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

并且,在同一个Activity中,添加这个方法来处理按钮点击

@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
this.finish();
return true;
}
return super.onOptionsItemSelected(item);
}

在更新版本中getActionBar()不起作用!

相反,你可以用这种方法

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}

在android标题栏中添加返回按钮这有助于你在2020年

为了在Kotlin中显示操作栏后退按钮 有两种方法来实现它

<强> 1。使用Android提供的默认操作栏 -您的活动必须使用具有操作栏的主题 -例如:Theme.AppCompat.Light.DarkActionBar

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val actionBar = supportActionBar
actionBar!!.title = "your title"
actionBar.setDisplayHomeAsUpEnabled(true)
//actionBar.setDisplayHomeAsUpEnabled(true)
}


override fun onSupportNavigateUp(): Boolean {
onBackPressed()
return true
}

<强> 2。设计你自己的动作栏 -禁用默认操作栏 -例如:Theme.AppCompat.Light.NoActionBar -在activity.xml中添加布局

    <androidx.appcompat.widget.Toolbar
android:id="@+id/main_toolbar"
android:layout_width="match_parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">


<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:layout_editor_absoluteX="16dp">


<TextView
android:id="@+id/main_toolbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your Title"
android:textSize="25sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.appcompat.widget.Toolbar>


  • onCreate
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)


setSupportActionBar(findViewById(R.id.main_toolbar))
}
  • 创建自己的按钮
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >


<item
android:id="@+id/main_action_toolbar"
android:icon="@drawable/ic_main_toolbar_item"
android:title="find"
android:layout_width="80dp"
android:layout_height="35dp"
app:actionLayout="@layout/toolbar_item"
app:showAsAction="always"/>


</menu>
  • 在YourActivity.kt
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.main_toolbar_item, menu)


leftToolbarItems = menu!!.findItem(R.id.main_action_toolbar)
val actionView = leftToolbarItems.actionView
val badgeTextView = actionView.findViewById<TextView>(R.id.main_action_toolbar_badge)
badgeTextView.visibility = View.GONE


actionView.setOnClickListener {
println("click on tool bar")
}
return super.onCreateOptionsMenu(menu)
}

对我来说;我只需要像这样添加android:parentActivityName attr到我的活动:

<activity
android:name=".AboutActivity"
android:label="@string/title_activity_about"
android:parentActivityName=".MainActivity" />

返回按钮出现并按预期工作。