如何在Android中单击按钮打开自定义菜单(它不是按钮的上下文菜单)?

时间:2015-06-11 03:28:29

标签: android

我希望通过单击btnDelete按钮显示自定义菜单deleterecord.xml。它不是btnDelete的上下文菜单,打开上下文菜单需要长按,因此您无法使用registerForContextMenu来执行此操作。

我用openOptionsMenu()打开Options菜单,当我点击btnMore按钮时,我希望点击btnDelete按钮打开另一个自定义菜单(菜单文件是deleterecord.xml),该怎么办?谢谢!

 private void SetButtons() {       
    findViewById(R.id.btnMore).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            openOptionsMenu();
        }
    });

   findViewById(R.id.btnDelete).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           //How to open deleterecord.xml menu
        }
    });
 }

@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_more, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {    

    switch (item.getItemId()) {
        case R.id.MoreShare:                
            return true;
        case R.id.MoreSettings:
            return true;
        case R.id.MoreAbout:               
            return true;
    }
    return super.onOptionsItemSelected(item);
}

这是选项菜单menu_more.xml文件

<?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        tools:context="info.dodata.unlock.UnlockMain" >

        <item android:id="@+id/MoreShare"
           android:title="@string/MoreShare" />  

        <item android:id="@+id/MoreUninstall"
           android:title="@string/MoreUninstall" />    

        <item android:id="@+id/MoreAbout"
           android:title="@string/MoreAbout" /> 

    </menu>

这是我的自定义菜单deleterecord.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/ContextDeleteLess"
        android:title="Delete 10 records" />

    <item android:id="@+id/ContextDeleteMore"
        android:title="Delete 20 records"/>

</menu>

3 个答案:

答案 0 :(得分:0)

您可以在按钮下的xml布局中设置按钮onClick by android:onClick =“methodName”。此方法应位于您的视图类中,并且应该具有单个View参数。您可以使用它来确定视图是打开一个菜单还是另一个菜单。如果它不是按钮视图,请确保设置android:clickable =“true”。

答案 1 :(得分:0)

这是什么其他菜单?它是带菜单选项的对话框吗? 但是,如果您想使用您的选项显示Dialog,您可以执行以下操作:

findViewById(R.id.btnAnoter).setOnClickListener(new View.OnClickListener(){

@覆盖

public void onClick(查看v){

final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.menus);//This is your menu view.
dialog.show();

}

});

您需要在全局变量中存储菜单引用,然后在按钮单击时再次膨胀菜单。以下是相同的代码:

public class MainActivity extends Activity {

private Menu menu;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            openMenu1();
        }
    });

    button2.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            openMenu2();
        }
    });
}

private void openMenu1() {
    menu.clear();
    getMenuInflater().inflate(R.menu.main, menu);
    openOptionsMenu();
}

private void openMenu2() {
    menu.clear();
    getMenuInflater().inflate(R.menu.main1, menu);
    openOptionsMenu();
}

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

}

答案 2 :(得分:0)

您可以创建菜单布局并尝试将其打开为弹出窗口。

findViewById(R.id.btnAnoter).setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    Intent popup=new Intent(getBaseContext(),Islemler.class);
    popup.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    startActivity(popup);
  }
});

这就是我设法创建自定义菜单窗口的方法。