添加后退按钮到操作栏

hay*_*ssi 63 android android-layout android-actionbar

我一直试图在操作栏上添加一个后退按钮.

我希望我的观点看起来像这样: 在此输入图像描述

我想在操作栏的左侧添加后退按钮.

我添加了这段代码

ActionBar actionBar = getActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我怎样才能解决这个问题?

小智 127

设定后 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这有点骑士,你必须在采取该行动之前测试`menuItem == android.R.id.home`(通常在switch语句中连同该活动或片段的其他选项).对于API> = 16,则也可以简单地[限定清单中的父活动](http://developer.android.com/training/implementing-navigation/temporal.html) (15认同)
  • 请改用`getSupportActionBar()` (12认同)

cla*_*219 54

actionBar.setHomeButtonEnabled(true);
Run Code Online (Sandbox Code Playgroud)

然后添加以下内容

@Override
public boolean onOptionsItemSelected(MenuItem menuItem)
{       
    switch (menuItem.getItemId()) {
        case android.R.id.home:
            onBackPressed();
            return true;
        default:
            return super.onOptionsItemSelected(menuItem);
    }
}
Run Code Online (Sandbox Code Playgroud)

正如naXa所建议的,我已经添加了一个检查itemId,以便在操作栏上有多个按钮时使其正常工作.


Jas*_*ulo 26

这个对我有用:

@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;
}
Run Code Online (Sandbox Code Playgroud)

当您使用SupportActionBar中的后退按钮时,将调用onSupportNavigateUp()方法.


小智 24

设定后

 actionBar.setHomeButtonEnabled(true);
Run Code Online (Sandbox Code Playgroud)

您必须在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>
Run Code Online (Sandbox Code Playgroud)

请点击此处了解更多信息http://developer.android.com/training/implementing-navigation/ancestral.html


小智 10

有两种方法可以解决这个问题.

选项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>
Run Code Online (Sandbox Code Playgroud)

选项2:更改ActionBar的设置 如果您不知道哪个Activity将调用Settings 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);
}
Run Code Online (Sandbox Code Playgroud)

然后,检测"后退按钮"按下并告诉Android关闭当前打开的活动.

@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);
    }
}
Run Code Online (Sandbox Code Playgroud)

应该这样做!


adv*_*tej 6

你需要检查menuItem.getItemId()针对android.R.id.homeonOptionsItemSelected方法

Android Sherlock ActionBar Up按钮重复


Aru*_*dra 6

首先使用这个:

ActionBar bar = getSupportActionBar();
bar.setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

然后在onOptionsItemSelected方法中设置按钮单击操作

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


M. *_*han 6

更简单,更好:对于API> = 16

只需在Manifest中为每个活动添加"parentActivityName".后退按钮将自动将您带到父活动.

<activity
        android:name="com.example.myfirstapp.DisplayMessageActivity"
        android:label="@string/title_activity_display_message"
        android:parentActivityName="com.example.myfirstapp.MainActivity" >
Run Code Online (Sandbox Code Playgroud)


Ami*_*ela 6

使用此按钮显示后退按钮并移至上一个活动,

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);
        }
    }
Run Code Online (Sandbox Code Playgroud)


Saa*_*mud 5

如果有其他人需要解决方案

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int id = item.getItemId();

    if (id == android.R.id.home) {
        onBackPressed();
    }

    return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)