如何使图标与Android中的物理后退按钮相同?

时间:2015-02-10 17:29:38

标签: android back

我有MainActivitySecondActivity

的AndroidManifest.xml

<activity
    android:name=".MainActivity"
    android:label="@string/app_name" >
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
    android:name=".SecondActivity"
    android:label="@string/title_activity_second_activitity"
    android:parentActivityName=".MainActivity" >
</activity>

当我点击SecondActivity的后退图标时,MainActivity推送SecondActivity的可能性更大。相反,物理后退按钮会弹出SecondActivity并返回MainActivity

如何使后退箭头图标的行为与物理后退按钮相同?

5 个答案:

答案 0 :(得分:10)

根据谷歌的指南,物理后退按钮和图标后退按钮不应该以相同的方式工作。但是如果你想改变它的行为,你需要通过下一步来改写它的功能:

在您的SecondActivity覆盖onOptionsItemSelected

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home) {
        onBackPressed();    //Call the back button's method
        return true;
    }

    return super.onOptionsItemSelected(item);
}

此外,您需要从清单中删除android:parentActivityName=".MainActivity",但要避免删除后退图标,您需要将其设置为启用:

@Override
public boolean onCreate(Bundle savedInstanceState) {

    ...

    ActionBar actionBar = getActionBar();  //Make sure you are extending ActionBarActivity
    actionBar.setDisplayHomeAsUpEnabled(true);
    actionBar.setHomeButtonEnabled(true);

    //It's also possible to use getSupportActionBar()
}

答案 1 :(得分:4)

卡洛斯&#39;回答有效。还有另一种方法,我认为更直接:只需将一个点击监听器直接添加到后面的图标。

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
        finish();
        }
    });

答案 2 :(得分:2)

要实现此行为,您可以将MainActivity的launchMode定义为singleTop活动。通过添加以下行在您的Manifest中轻松完成:

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:launchMode="singleTop" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
<activity
    android:name=".SecondActivity"
    android:label="@string/title_activity_second_activitity"
    android:parentActivityName=".MainActivity" >
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
</activity>

如果您想支持API 15及更低版本,我建议您在SecondActivity中添加元数据元素,如上所示。

答案 3 :(得分:1)

你需要添加3件事来定义你想要进行什么样的活动,不要将该活动推到堆栈上,并使后退按钮的行为与物理后退按钮相同。

1。定义按下back button时要进入的活动。

manifest文件的activity标记中包含

<activity
        android:name=".SecondActivity"
        android:parentActivityName=".MainActivity" >
        <meta-data              //Use meta-data if you are using support library
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />

2。覆盖onBackPressed文件中的SecondActivity.class方法,以便在按下后退按钮时不将MainActivity推入堆栈。

@Override
public void onBackPressed(){
    Intent i = new Intent(getApplicationContext(), MainActivity.class);
    startActivity(i);
    finish();
}

3。使用showHomeAsUpEnabled()在actionBar中设置后退按钮。

如果您使用的是支持库,请

ActionBar().setDisplayHomeAsUpEnabled(true);getSupportActionBar().setDisplayHomeAsUpEnabled(true);

答案 4 :(得分:0)

doc.text(20, 20,  `Time: ${this.hour} : ${this.minutes}`);