menuItems的registerForContextMenu

时间:2013-12-04 03:21:59

标签: android android-actionbar contextmenu

好的,我确定这是一个愚蠢的问题,但我无法在网上找到答案。我想为上下文菜单注册一个菜单项,但我不知道如何无法弄清楚如何作为视图访问MenuItem。因此,当我单击应用程序ActionBar上的其中一个按钮时,我想要弹出一个上下文菜单。我猜这必须在OnCreateOptionsMenu中完成?

编辑:更新...添加此代码可以部分工作,但会覆盖我的Drawable。

XML

<item android:id="@+id/Favorites" 
      android:title="favorite_label" 
      android:icon="@android:drawable/ic_menu_myplaces" 
      android:actionViewClass="android.widget.ImageButton"
      android:showAsAction="always"
    />

主要活动

        FavoriteButton = (ImageButton) menu.findItem(R.id.Favorites).getActionView();

        FavoriteButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                registerForContextMenu(v);
            }
        });

3 个答案:

答案 0 :(得分:0)

您可以点击以下链接exmple link

 ListView list = (ListView)findViewById(R.id.list);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.listitem, Countries);
list.setAdapter(adapter);
registerForContextMenu(list);

更改registerForContextMenu(list); to registerForContextMenu(buttonname);

我希望它对你有用。

答案 1 :(得分:0)

在resource / menu / main.xml中添加以下代码:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" >         
                 <menu>
                <item
                    android:id="@+id/gray"
                    android:title="@string/gray" />
                <item
                    android:id="@+id/green"                      
                    android:title="@string/green" />
                <item
                    android:id="@+id/red"                      
                    android:title="@string/red" />
                <item
                    android:id="@+id/orange"                       
                    android:title="@string/orange" />           

                <item
                    android:id="@+id/purple"
                    android:title="@string/dark_blue" />
            </menu>

                </item>
        </menu>

在主活动中,您可以通过覆盖belo方法来访问它:

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {           
        switch (item.getItemId()) {   
                    case R.id.gray:
            color = Color.parseColor("#FF666666");              
            return true;

        case R.id.green:
            color = Color.parseColor("#FF96AA39");              
            return true;

        case R.id.orange:
            color = Color.parseColor("#FFF4842D");              
            return true;

        case R.id.purple:
            color = Color.parseColor("#FF5161BC");              
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

答案 2 :(得分:0)

以下是我所做的:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // "menu_main" is the menubar of my actionbar menu
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}



public boolean onOptionsItemSelected(MenuItem item) {

    // "item" is the menu button I have pressed
    int id = item.getItemId();

    // "Settings" button
    if (id == R.id.action_settings) {
        return true;
    }

    // Difficulty button to change the difficulty of my game
    else if (id == R.id.action_difficulty) {
        View view = findViewById(R.id.action_difficulty);
        registerForContextMenu(view);
        openContextMenu(view);
    }
    return super.onOptionsItemSelected(item);
}

这对我来说很好用!

BUT!如果您的菜单栏按钮位于“三点”按钮后面,则为

registerForContextMenu(view);

会使您的申请崩溃。我在弄清楚为什么......