繁体   English   中英

如何仅在主要活动中显示菜单?

[英]How to only show the menu in the main activity?

我只想在主活动中显示菜单,然后在其他活动中有一个后退按钮,而不是菜单。 现在,我只是想知道如何从不需要的活动的操作栏中删除菜单。

我的清单:

<?xml version="1.0" encoding="utf-8"?>

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".Insulter"
        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="Favourites"
        android:launchMode = "singleInstance">
    </activity>

    <activity
        android:name="Settings"
        android:launchMode = "singleInstance">
    </activity>


</application>

我主要活动中的菜单打开器:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        Intent startSettings = (new Intent(Insulter.this,Settings.class));
        startActivity(startSettings);
        return true;
    } else if (id == R.id.exit_the_app) {
        finish();
        return true;
    } else if (id == R.id.favourites) {
        Intent startFavs = (new Intent(Insulter.this, Favourites.class));
        String[] objects = new String[favs.size()];
        favs.toArray(objects);
        final ArrayList<String> list = new ArrayList<>(Arrays.asList(objects));
        startFavs.putStringArrayListExtra("favs",list);
        startActivity(startFavs);
        return true;
    }


    return super.onOptionsItemSelected(item);
}

Activity.onCreateOptionsMenu是创建它的地方。 只是不要覆盖此方法,或者让它返回false即可不显示菜单。

您必须返回true才能显示菜单。 如果返回false,则不会显示。

如果您对所有活动使用相同的实现,请定义一个boolean isMain字段,并从onCreateOptionsMenu返回

public boolean onCreateOptionsMenu (Menu menu) {
    if (!isMain)
        return false;

    [creating the menu here like before]
}

如果您想在任何活动中使用菜单,则需要覆盖onCreateOptionsMenuonOptionsItemSelected ...。如果您不想使用菜单,则只需在活动中不覆盖这些方法...

对于您创建的每个活动,在res/menu文件夹中必须有一个与之关联的res/menu文件。 只需删除或注释相应的<item>标签。 您可以通过查看预览屏幕中的输出来对它们进行试验。

注意:我认为这仅在使用UI自动创建活动(即不手动)时有效,因为相应的菜单文件是使用该UI自动生成的。

您需要按照以下步骤删除非主要活动中的选项菜单添加返回按钮 -

  1. 不要覆盖onCreateOptionsMenu方法。
  2. 在您活动的onCreate方法中调用getActionBar()。setDisplayHomeAsUpEnabled(true)
  3. 以下列方式覆盖onOptionsItemSelected方法-

     @Override public boolean onOptionsItemSelected(MenuItem item) { switch(item.getItemId()) { case android.R.id.home: finish(); return super.onOptionsItemSelected(item); } } 

暂无
暂无

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

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