菜单未在Activity中显示 - Android

11

我已经编写了一个 Android 菜单的代码,但是它现在没有显示在我的活动中,以下是我的代码:

我只展示相关代码

Manifest.xml

<uses-sdk
        android:minSdkVersion="15"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppBaseTheme" >

MainActivity.Java

public class MainActivity extends Activity {

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

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

    @Override
    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.
        switch (item.getItemId()) {
        // Some action here

        }
    }
}

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="com.example.androidex1.MainActivity" >

   <item android:id="@+id/item1"
       android:title="one" />
    <item android:id="@+id/item2"

        android:title="two" />
    <item android:id="@+id/item3"

        android:title="three" />
    <item android:id="@+id/item4"

        android:title="four" />

</menu>

之前尝试过的步骤:

操作栏上未显示菜单项

结果:

已经尝试,但仍然无法显示菜单。

Android选项菜单未显示

结果:

菜单仍然没有出现。

Android菜单未显示

结果:

从未添加该属性。

Android中的选项菜单未出现

结果:

super.onCreateOptionsMenu(menu); is also added in the code but still the menu's don't appear.

我的问题是,我只想看到菜单而不是操作栏,可能的问题是什么?我没有收到任何错误信息,主要问题是我无法看到菜单本身。


好的,我建议使用Android Studio!你看到我的帖子了吗?我已经编辑过了... - Dario
@Dario 在 Studio 中尝试了相同的操作,但不明白发生了什么?仍然无法看到简单菜单。 - oldcode
你能发布一些你的应用程序图片吗?添加更多信息,以便我们了解出了什么问题! 我只需创建一个新项目,使用你的代码创建一个menu.xml,将菜单添加到活动中,如果我在我的Galaxy S3手机上按菜单按钮,我会看到菜单的3个选项。 在Android Studio中使用Nexus 7的AVD也是如此。 我建议使用更新的Android Studio和最新版本的SDK再次尝试。 - Dario
如果可以,请发布您的结果图片和您期望的图片! - Dario
17个回答

17
我不太清楚,你是看到了你的操作栏但没有看到菜单,还是根本就没有看到操作栏?如果是后者,尝试在清单文件的标签中应用支持操作栏的样式。例如:
android:theme="@style/Theme.AppCompat.Light.DarkActionBar"

对于较新版本的Android:
android:theme="@style/Theme.AppCompat.Light"
android:theme="@style/Theme.AppCompat.Dark"

我没有看到Actionbar,实际上我没有在我的活动中添加任何Actionbar。 - oldcode
2
因为您在Java类中扩展了Activity,所以您不能使用Theme......DarkActionBar。 现在ActionBarActivity已被弃用,请使用AppCompatActivity并使用Toolbar作为新的ActionBar。 - Dario
尝试在onCreate中添加以下代码:requestWindowFeature(Window.FEATURE_ACTION_BAR); - Anastasiia Chervinska
我应该在哪里调用这个函数? - oldcode
在 onCreate 方法中 - 就像这样 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_ACTION_BAR); setContentView(R.layout.activity_main); } - Anastasiia Chervinska
显示剩余2条评论

6

在我的情况下,我通过以下方式解决了这个问题:

android.support.v7.widget.Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();

style.xml

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">

activity_main.xml

<com.google.android.material.appbar.MaterialToolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentStart="true"
    android:background="@color/colorPrimary"/>

6

您需要扩展自AppCompatActivity而不是Activity


1
你可以贴一些代码作为示例,展示如何按照你的建议改进你的答案。 - rsz
这很容易理解。不要这样写:public class MainActivity extends Activity{ ... }而是这样写:public class MainActivity extends AppCompatActivity{ ... } - Scott Siddall

4

由于我完全使用kotlin编码,因此您需要将此添加到onCreate或onCreateView中。

setHasOptionsMenu(true)

2

您需要做的是首先将工具栏与布局进行连接。

 android.support.v7.widget.Toolbar toolbar=findViewById ( R.id.toolbar );
 setSupportActionBar ( toolbar );

然后

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater=getMenuInflater ();
    inflater.inflate ( R.menu.city_menu,menu );
    return true;
}

1
您正在膨胀错误的菜单文件:
``` getMenuInflater().inflate(R.menu.main, menu); ```
根据您的代码,您的菜单文件必须命名为`main.xml`。

0

我尝试了你的代码,在我的手机上一切都正常!唯一的不同之处是

 @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle item selection
        switch (item.getItemId()) {
            case R.id.item1:
                //DoSomething();
                Toast.makeText(getApplicationContext(), "Hello 1", Toast.LENGTH_LONG).show();
                return true;
            case R.id.item2:
                //DoSomething2();
                Toast.makeText(getApplicationContext(), "Hello 2", Toast.LENGTH_LONG).show();
                return true;

            case R.id.item3:
                //DoSomething3();
                Toast.makeText(getApplicationContext(), "Hello 3", Toast.LENGTH_LONG).show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

您确定目录和菜单名称正确吗?

getMenuInflater().inflate(R.menu.main, menu);

请确保目录是menu,文件名为main.xml。当它在Android Studio中自动生成时,它会被命名为main_activity_menu.xml,因此请确保填充器中的名称正确,因为我使用您的代码创建了一个新的测试应用程序,并查看了菜单!

如果您想添加带有菜单项(如图标)的ActionBar,请阅读Google开发者指南

如果不需要ActionBar,则可以阅读Google开发者菜单指南。祝编码愉快!


为什么通常的方法不起作用?为什么我们需要扩展AppCompatActivity?我仍然想扩展Activity。抱歉,这并没有回答我的问题。 - oldcode
请看这个链接:http://www.javatpoint.com/android-option-menu-example,为什么可以在不扩展AppCompat Activity的情况下实现菜单? - oldcode
所以你只想要一个菜单。 好的,编辑你的帖子,它不清楚。 你遇到了一些错误吗?发出日志。 如果你在手机上点击菜单按钮会发生什么?什么都没有显示? 无论如何,尝试扩展AppcompatActivity而不仅仅是Activity,它不会破坏你的手机,不用担心! - Dario
所有人都明白你需要在这里添加一个ActionBar,修改一下你的帖子吧!现在我用一个简单的菜单编辑了代码。 - Dario
以下代码可帮助你完成如下操作
getMenuInflater().inflate(R.menu.yourxmlfilename, menu)
- yas
显示剩余2条评论

0

我这里也遇到了同样的问题,调试了几个小时后,我尝试创建另一个布局XML文件并更新活动以使用新布局。然后从旧布局中复制粘贴,更改一些ID。不知道为什么,但它起作用了。


0

尝试更改模拟器。有时模拟器会出现故障,影响工作。


{btsdaf} - Ibo
{btsdaf} - Justin Joseph

0

有些人可能会遇到这样的问题,即他们的菜单项在模拟器上不可见或显示,但在布局验证中显示。 要解决这个问题, 进入app>manifests 在AndroidManifests .xml中 添加以下行 android:theme="@style/Theme.AppCompat.Light.DarkActionBar" 而不是之前的android:theme ..行

这解决了我的问题...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接