我一直在尝试将返回按钮添加到操作栏中。
我想让我的视图看起来像这样:
我想把返回按钮添加到操作栏的左边。
我添加了这段代码:
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
但它不起作用。
我该如何修复?
我一直在尝试将返回按钮添加到操作栏中。
我想让我的视图看起来像这样:
我想把返回按钮添加到操作栏的左边。
我添加了这段代码:
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
但它不起作用。
我该如何修复?
在调用actionBar.setHomeButtonEnabled(true);
之后,添加以下代码:
@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);
}
}
menuItem == android.R.id.home
,这有点草率(通常在 switch 语句中与其他选项一起)。对于API >= 16,你还可以在清单文件中 定义父活动。请注意不要改变原本的含义。 - RedGlyphgetSupportActionBar()
代替。 - John添加
actionBar.setHomeButtonEnabled(true);
然后添加以下内容
@Override
public boolean onOptionsItemSelected(MenuItem menuItem)
{
switch (menuItem.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(menuItem);
}
}
如naXa所建议的那样,我增加了对itemId
的检查,以便在操作栏上有多个按钮的情况下能够正常工作。
onOptionsItemSelected()
处理,因此我们需要检查menuItem.getItemId() == android.R.id.home
。 - naXa stands with Ukraine这个对我有用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_your_activity);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// ... other stuff
}
@Override
public boolean onSupportNavigateUp(){
finish();
return true;
}
在使用SupportActionBar的返回按钮时,会调用onSupportNavigateUp()方法。
设置完成后
actionBar.setHomeButtonEnabled(true);
您需要在AndroidManifest.xml文件中配置父活动。
<activity
android:name="com.example.MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat" />
<activity
android:name="com.example.SecondActivity"
android:theme="@style/Theme.AppCompat" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.MainActivity" />
</activity>
点击此处获取更多信息。
有两种方法来解决这个问题。
选项1:更新Android清单 如果设置活动始终从同一活动调用,则可以在Android清单中建立关系。 Android将自动在ActionBar中显示“返回”按钮。
<activity
android:name=".SettingsActivity"
android:label="Setting Activity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.example.MainActivity" />
</activity>
选项2:更改ActionBar的设置 如果您不知道哪个Activity将调用设置Activity,则可以像这样创建它。首先,在扩展ActionBarActivity的活动中(确保您的@imports与您寻找的兼容级别相匹配)。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_settings_test);
ActionBar actionBar = getSupportActionBar();
actionBar.setHomeButtonEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
}
然后,检测到“返回按钮”按下并告诉Android关闭当前打开的Activity。
@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);
}
}
应该就这样了!
ActionBar bar = getSupportActionBar();
bar.setDisplayHomeAsUpEnabled(true);
onOptionsItemSelected
方法中设置按钮单击的操作。 @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}`
- Shrenikcase android.R.id.home:
这个情况没有被调用,有什么提示吗? - Shrenik更加简单和优秀:
针对API >= 16版本,只需在清单文件中的每个活动中添加“parentActivityName”,返回按钮就会自动带您回到父活动。
<activity
android:name="com.example.myfirstapp.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.myfirstapp.MainActivity" >
final ActionBar actionBar = getSupportActionBar();
assert actionBar != null;
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setHomeAsUpIndicator(R.drawable.back_dark);
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
在onOptionsItemSelected
方法中,您需要将menuItem.getItemId()
与android.R.id.home
进行比较。
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}