如何为android中的每个活动添加单独的溢出菜单

时间:2016-01-30 17:38:39

标签: android android-studio menu

在我的android项目中,到目前为止大约有10个活动,我希望这些活动有单独的溢出菜单(每个活动有一个溢出菜单,其中包含不同的项目),是否可能?如果有可能,那么任何人都可以告诉我如何创建它们。我使用Android Studio作为我的IDE。 以下是我的一些源代码

menu_main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity">
    <group android:checkableBehavior="single">
        <!--only one item can be seleted-->

        <item
            android:id="@+id/itemBlue"
            android:orderInCategory="1"
            android:title="@string/blueText"
            app:showAsAction="never" />

        <item
            android:id="@+id/itemRed"
            android:orderInCategory="2"
            android:title="@string/redText"
            app:showAsAction="never"
            />

        <item
            android:id="@+id/itemGreen"
            android:title="@string/greenText"
            app:showAsAction="never"
            android:orderInCategory="3"
            />


    </group>


</menu>

这是一个活动,即HomeScreen.java

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageButton;
import android.widget.RelativeLayout;

public class HomeScreen extends ActionBarActivity implements View.OnClickListener {
    private ImageButton ibLogin,ibSeeTimeTable;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home_screen);

        ibLogin=(ImageButton)findViewById(R.id.ibLogin);
        ibSeeTimeTable=(ImageButton)findViewById(R.id.ibSeeTimeTable);

        ibLogin.setOnClickListener(this);
        ibSeeTimeTable.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {
        switch (v.getId()){
            case R.id.ibLogin:
                startActivity(new Intent(this,MainActivity.class));

                break;

            case R.id.ibSeeTimeTable:
                startActivity(new Intent(this,SelectTimeTable.class));
                finish();
                break;
        }

    }
@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    // this method is called when an item is being selected from overflow menu
    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.

        //first we have to make an object of the RelativeLayout
        RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.mainMenu);

        switch (item.getItemId()) {
            case R.id.itemBlue:
                if (item.isChecked()) {
                    //if it is already checked
                    item.setChecked(false);
                } else {
                    item.setChecked(true);
                }


                relativeLayout.setBackgroundColor(Color.BLUE);
                return true;

            case R.id.itemGreen:
                if (item.isChecked()) {
                    item.setChecked(false);

                } else {
                    item.setChecked(true);

                }
                relativeLayout.setBackgroundColor(Color.GREEN);
                return true;

            case R.id.itemRed:
                if (item.isChecked()) {
                    item.setChecked(false);

                } else {
                    item.setChecked(true);
                }
                relativeLayout.setBackgroundColor(Color.RED);

                return true;
            // this indicate that the event is handled

            default:
                return super.onOptionsItemSelected(item);
            //if any event doesnot catch it, then this default works

        }
        //noinspection SimplifiableIfStatement

    }
}

我有超过10个其他活动,我如何为他们添加单独的溢出方法

1 个答案:

答案 0 :(得分:2)

您应该覆盖每个活动中的onCreateOptionsMenu(菜单菜单)方法,并指定与该活动相关的菜单xml资源。例如:

在app / res / menu中为每个活动创建一个xml:     menu_activity1.xml     menu_activity2.xml     menu_activity3.xml

然后在每个活动中:

@Override
public boolean onCreateoptionsMenu(Menu menu){
    getMenuInflater().inflate(R.menu.menu_activity1, menu);
    return true;
}

然后,当然,覆盖onOptionsItemSelected(MenuItem项)以进行适当的响应。

单独注意:碎片,伙计,碎片!