我正在尝试在Back button
上显示Action bar
以移动上一页/活动或主页(首次打开)。
我不能这样做。
我的代码。
ActionBar actionBar = getActionBar();
actionBar.setHomeButtonEnabled(true);
代码位于onCreate
。
答案 0 :(得分:186)
这是一个简单的显示后退按钮
actionBar.setDisplayHomeAsUpEnabled(true);
然后您可以在onOptionsItemSelected
上自定义后台事件case android.R.id.home:
this.finish();
return true;
答案 1 :(得分:161)
我认为onSupportNavigateUp()
是最好和最简单的方法,请查看以下步骤。步骤1是必要的,第二步有替代方案。
第1步显示后退按钮:在onCreate()
方法中添加此行以显示后退按钮。
assert getSupportActionBar() != null; //null check
getSupportActionBar().setDisplayHomeAsUpEnabled(true); //show back button
第二步实施后退点击:覆盖此方法
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
多数民众赞成你完成了 OR步骤2替代方法:您可以将清单文件中的元素添加为
<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发表评论。
答案 2 :(得分:63)
神奇发生在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);
}
}
答案 3 :(得分:45)
官方解决方案
将这两个代码段添加到您的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);
}
添加元数据和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
答案 4 :(得分:31)
将这些行添加到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);
}
}
希望这会对你有帮助..!
答案 5 :(得分:22)
尝试使用此代码,仅在需要后退按钮时才考虑此代码。
@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;
}
答案 6 :(得分:16)
在onCreate
方法上添加:
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
在AndroidManifest.xml
中定义父活动(按下操作栏中的后退按钮后将调用的活动):
在Manifest的<activity>
定义中,添加以下行:
android:parentActivityName="com.example.activities.MyParentActivity"
答案 7 :(得分:8)
我知道我有点晚了,但是能够通过直接关注docs来解决这个问题。
将元数据标记添加到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
@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);
}
而且,你将全部成立!
答案 8 :(得分:5)
我知道以上是很多有用的解决方案,但这次我读了这篇文章(当前的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。
第三,覆盖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);
}
}
希望这会有所帮助!
答案 9 :(得分:4)
要实现这一目标,只需两个步骤,
第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);
}
答案 10 :(得分:3)
试试这个, 在你的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);
}
}
答案 11 :(得分:3)
这很简单,对我来说很好
将此内容添加到onCreate()方法中
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
将此内容添加到oncreate()方法之外
@Override
public boolean onOptionsItemSelected(MenuItem item) {
onBackPressed();
return true;
}
答案 12 :(得分:3)
在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
这就是我们必须做的一切。
答案 13 :(得分:2)
我以这种方式解决了
@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();
}
答案 14 :(得分:2)
为了在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>
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>
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)
}
答案 15 :(得分:1)
就我而言;我只需将android:parentActivityName
attr添加到我的活动中,如下所示:
<activity
android:name=".AboutActivity"
android:label="@string/title_activity_about"
android:parentActivityName=".MainActivity" />
,然后出现后退按钮,并且按预期方式工作。
答案 16 :(得分:1)
回答可能为时已晚,但我认为我的解决方案更短,功能更多。
// 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;
}
答案 17 :(得分:1)
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);
}
答案 18 :(得分:1)
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;
}
答案 19 :(得分:1)
我的工作代码返回屏幕。
@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);
}
答案 20 :(得分:0)
在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);
}
}
答案 21 :(得分:0)
Manifest.xml
<activity
android:name=".Activity.SecondActivity"
android:label="Second Activity"
android:parentActivityName=".Activity.MainActivity"
android:screenOrientation="portrait"></activity>
答案 22 :(得分:0)
在onCreate函数中添加以下代码:
getSupportActionBar()。setDisplayHomeAsUpEnabled(true);
然后覆盖: @Override public boolean onOptionsItemSelected(MenuItem item){ onBackPressed(); 返回true; }
答案 23 :(得分:0)
在您的onCreate方法中添加此行
setTitle("Your title");\\if you want to change
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
并将此方法添加到您的活动中
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
this.finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
答案 24 :(得分:0)
在更新的版本中,getActionBar()不起作用!
相反,您可以通过这种方式完成
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
add back button in android title bar这将在2020年为您提供帮助