0

我想用操作栏显示我的菜单,但我的菜单不会显示,这是我的源代码:

public class EpolicyMainActivity extends TabActivity {
/** Called when the activity is first created. */
public void onCreate(Bundle savedInstanceState) {
    //hide title bar
    BasicDisplaySettings.toggleTaskBar(EpolicyMainActivity.this, false);
    //show status bar
    BasicDisplaySettings.toggleStatusBar(EpolicyMainActivity.this, true);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.menu);

    Resources res = getResources(); // Resource object to get Drawables
    TabHost tabHost = getTabHost();  // The activity TabHost
    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
    Intent intent;  // Reusable Intent for each tab

    // Create an Intent to launch an Activity for the tab (to be reused)
    intent = new Intent().setClass(this, LoginActivity.class);
    spec = tabHost.newTabSpec("Login").setIndicator("",
              res.getDrawable(R.drawable.epolicy_menu_xml_home))
              .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, NABActivity.class);
    spec = tabHost.newTabSpec("NAB").setIndicator("",
              res.getDrawable(R.drawable.epolicy_menu_xml_nab))
              .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, ContactActivity.class);
    spec = tabHost.newTabSpec("Contact").setIndicator("",
              res.getDrawable(R.drawable.epolicy_menu_xml_contact))
              .setContent(intent);
    tabHost.addTab(spec);

    intent = new Intent().setClass(this, AgenActivity.class);
    spec = tabHost.newTabSpec("Agen").setIndicator("",
              res.getDrawable(R.drawable.epolicy_menu_xml_agen))
              .setContent(intent);
    tabHost.addTab(spec);

    for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++){
        tabHost.getTabWidget().getChildAt(i).setPadding(0,0,0,0);
        tabHost.getTabWidget().getChildTabViewAt(i).setBackgroundDrawable(null);
    }
    tabHost.setCurrentTab(0);

}
public boolean onCreateOptionsMenu(Menu menu)
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    return super.onCreateOptionsMenu(menu);

}

 public boolean onOptionsItemSelected(MenuItem item) {
     super.onOptionsItemSelected(item);

        switch (item.getItemId()) {
            case R.id.menu_bantuan:     
                Intent itAbout = new Intent(EpolicyMainActivity.this, EpolicyBantuan.class);
                itAbout.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                startActivity(itAbout);

                break;
            case R.id.menu_exit:     
                dialogExit();

                break;
            case R.id.menu_logout:
                dialogSignOut();

                break;
        }


        return true;
    }
 public void dialogSignOut()
    {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Apakah anda ingin sign-out?")
               .setCancelable(false)
               .setPositiveButton("Ya", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       Intent itSignOut = new Intent(EpolicyMainActivity.this, LoginActivity.class);
                       itSignOut.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                       startActivity(itSignOut);
                       finish();
                   }
               })
               .setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                   }
               });
        AlertDialog alert = builder.create();
        alert.show();
    }
 public void dialogExit()
    {

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("Apakah anda ingin keluar?")
               .setCancelable(false)
               .setPositiveButton("Ya", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       Intent itSplashEnd = new Intent(EpolicyMainActivity.this, SplashOutActivity.class);

                       itSplashEnd.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                       itSplashEnd.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                       startActivity(itSplashEnd);
                       finish();
                   }
               })
               .setNegativeButton("Tidak", new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                        dialog.cancel();
                   }
               });
        AlertDialog alert = builder.create();
        alert.show();
    }
 @Override
    public void onBackPressed() {
        dialogExit();
    }

这是我的 menu.xml :

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_bantuan"
    android:title="@string/menu_bantuan"
    android:orderInCategory="100" 
     android:showAsAction="ifRoom|withText"/>

  <item android:id="@+id/menu_exit"
    android:title="@string/menu_exit"
    android:orderInCategory="100"
    android:showAsAction="ifRoom|withText" />

  <item android:id="@+id/menu_logout"
    android:title="@string/menu_logout"
    android:orderInCategory="100"
    android:showAsAction="ifRoom|withText" />

在我的主布局中,我正在使用标题,这是否会影响我的菜单,所以我的菜单不会显示或其他任何东西?

4

2 回答 2

0

我的假设是你应该总是先打电话给 super。

public boolean onCreateOptionsMenu(Menu menu)
{
    super.onCreateOptionsMenu(menu);
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    return true;
}

我假设您的 menu.xml 有一个适当的菜单结束标记。你的 res/menu 文件夹中是否有这个 xml 文件?您可以验证是否调用了 onCreateOptionsMenu 吗?

在 Android 2.3 及更低版本上,您必须按菜单按钮,而在以后的发行版中,它应该显示在标题栏中。由于您使用的是 TabActivity,我假设您正在为 Android 2.3 编写应用程序。

这个问题可能对 onMenuItemSelected() 方法有用: 合并 TabActivity 菜单和包含的活动菜单

对于 TabActivity 中的活动:如何在 Android 的 TabActivity 中创建 optionsMenu

也许当您按下菜单按钮时,您所在的特定选项卡活动(例如 LogInActivity)的选项菜单被调用,而不是其父项的选项菜单。尝试将此代码放入每个子活动中:

public boolean onCreateOptionsMenu(Menu menu)
{
    return getParent().onCreateOptionsMenu(menu);
}
于 2013-05-13T09:47:18.427 回答
0

谷歌决定完全避免使用菜单。请阅读这篇文章http://android-developers.blogspot.ru/2012/01/say-goodbye-to-menu-button.html

如果设备没有硬件菜单按钮并且您将 targetSDK 版本设置为 > 10,则用户无法使用菜单。作为短期解决方案,您可以设置 targetSDK = 10 作为长期解决方案考虑使用 ActionBar http://developer.android.com/guide/topics/ui/actionbar.html

于 2013-11-25T07:43:40.043 回答