Android中的动态菜单?

Kar*_*amu 0 android

我需要在按钮Click时显示菜单.但是我无法显示菜单.我的代码如下.谁能告诉我我的代码有什么问题??? 提前致谢 !!!

代码:

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;

public class DynamicMenu extends Activity {
/** Called when the activity is first created. */
private Context context;
Button btnMenu;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = this;


    LinearLayout llay = new LinearLayout(context);

    btnMenu = new Button(context);
    btnMenu.setText("Show Menu");


    llay.addView(btnMenu);

    setContentView(llay);

    registerForContextMenu(btnMenu);

}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenu.ContextMenuInfo menuInfo) {
    Menu m_menu = menu;
    m_menu.add(0, 1, 0, "Settings");
    m_menu.add(0, 2, 0, "About");
    m_menu.add(0, 3, 0, "Exit");
}

}
Run Code Online (Sandbox Code Playgroud)

Sha*_*dul 6

你想叫什么?Menu或者Context Menu这些是两件不同的事情.

您编码的内容会导致出现上下文菜单.(长按按钮显示上下文菜单),下面是一个示例:

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

public class MenuDemo extends Activity {
/** Called when the activity is first created. */
private Context context;
Button btnMenu;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    context = this;


    LinearLayout llay = new LinearLayout(context);

    btnMenu = new Button(context);
    btnMenu.setText("Show Menu");


    llay.addView(btnMenu);

    setContentView(llay);

    registerForContextMenu(btnMenu);

}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) {//Context Menu that appears when long clicked.
    Menu m_menu = menu;
    m_menu.add(Menu.NONE, Menu.FIRST+1, 0, "Settings");
    m_menu.add(Menu.NONE, Menu.FIRST+2, 0, "About");
    m_menu.add(Menu.NONE, Menu.FIRST+3, 0, "Exit");
}

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
    //Menu that appears when menu button is pressed on device
     Menu m_menu = menu;
     m_menu.add(Menu.NONE, Menu.FIRST+3, 0, "Settings");
     m_menu.add(Menu.NONE, Menu.FIRST+4, 0, "About");
     m_menu.add(Menu.NONE, Menu.FIRST+5, 0, "Exit");
     return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        String msg="Selected from menu: ";
        switch (item.getItemId()){
        case Menu.FIRST+3:
            Toast.makeText(this, msg+"Settings Menu", Toast.LENGTH_LONG).show();
            return true;
        case Menu.FIRST+4:
            Toast.makeText(this, msg+"About Menu", Toast.LENGTH_LONG).show();
            return true;
        case Menu.FIRST+5:
            Toast.makeText(this, msg+"Exit Menu", Toast.LENGTH_LONG).show();
            return true;

        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {

        String msg="Selected from context menu: ";
        switch (item.getItemId()){
        case Menu.FIRST+1:
            Toast.makeText(this, msg+"Settings", Toast.LENGTH_LONG).show();
            return true;
        case Menu.FIRST+2:
            Toast.makeText(this, msg+"About", Toast.LENGTH_LONG).show();
            return true;
        case Menu.FIRST+3:
            Toast.makeText(this, msg+"Exit", Toast.LENGTH_LONG).show();
            return true;

        }

        return super.onContextItemSelected(item);
    }


}
Run Code Online (Sandbox Code Playgroud)

这不是最好的实践和推荐的代码,你可以在这里真正使用多态.但我希望这会给你一个想法.