繁体   English   中英

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

[英]How to make back icon to behave same as physical back button in Android?

我有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

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

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

在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()
}

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

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

要实现此行为,您可以将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.定义按下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()showHomeAsUpEnabled()中设置后退按钮。

ActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); 如果您使用支持库。

@Override
    public void onBackPressed() {
       int mCount = pager.getCurrentItem();

        if(mCount>0){
            pager.setCurrentItem(0,false);
            firsticon.setBackgroundColor(Color.parseColor("#2B8C57"));
            secondicon.setBackgroundColor(Color.TRANSPARENT);
            thirdicon.setBackgroundColor(Color.TRANSPARENT);
            fourthicon.setBackgroundColor(Color.TRANSPARENT);
            fifthicon.setBackgroundColor(Color.TRANSPARENT);

        }else{
            this.finish();
        }

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM