Android工具栏和菜单让我发疯

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android工具栏和菜单让我发疯相关的知识,希望对你有一定的参考价值。

我已经在Activity xml文件中制作了一个工具栏(为简洁起见,已删除)

<Toolbar
    android:id="@+id/mytoolbar"
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize"
    android:theme="@style/ThemeOverlay.AppCompat.Dark"
    android:title="@string/password_manager"
    android:logo="@android:drawable/ic_menu_view"
    android:background="@color/colorPrimary"/>

[我确实尝试了其他类型的工具栏-androidx.appcompat ...,... appbar.MaterialToolbar,而我遇到的最常见的android.support.v7.widget.Toolbar。这些会使我的应用程序崩溃。

我制作了一个包含此菜单XML(为简洁起见:):

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

    <item
        android:id="@+id/hmenu_createnew"
        android:checkable="false"
        android:enabled="true"
        android:title="@string/create_new"
        app:showAsAction="always" />

</menu>

此时,一切看起来都很好,并且工作正常。现在-我想动态控制菜单项。我添加了覆盖:

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
    super.onPrepareOptionsMenu( menu );
    this.menu = menu;
    return true;
}

这就是令人沮丧的地方。上面的覆盖没有被调用。我进行了大量搜索,发现一个人建议对Activity类声明进行更改。

他说不是将“扩展活动”更改为“扩展AppCompatActivity”

我检查了我的类声明,并且已经 AppCompat。一时兴起,我将其更改为“活动”。

通过此更改,我现在可以在调试器中看到我的覆盖被调用。是的!

但是我的菜单找不到了。

在我的activity.class中,以下几行(为简洁起见,其内容为摘要:]

protected void onCreate(Bundle savedInstanceState) {

        toolbar = (Toolbar) findViewById(R.id.mytoolbar);
        setActionBar( toolbar );
        toolbar.inflateMenu( R.menu.home_mainmenu );

}

由于不再工作,我删除了toolbar.inflateMenu(),将其替换为getMenuInflater(),并将其放入替代中,如下所示。

@Override
public boolean onCreateOptionsMenu (Menu menu) {
    super.onCreateOptionsMenu( menu );
    getMenuInflater().inflate( R.menu.home_mainmenu, menu );
    return false;
}

不高兴。

我也尝试过:

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
    super.onPrepareOptionsMenu( menu );
    getMenuInflater().inflate( R.menu.home_mainmenu, menu );
    this.menu = menu;
    return false;
}

仍然没有喜悦。

在上面的两个替代中,我还尝试用getMenuInflater ....代替toolbar.inflateMenu ...

不高兴。

我想要的是一个常规工具栏,该工具栏带有右对齐的标准按钮,该按钮带有三个垂直点,在单击时会显示一个菜单。

目前,我很无能为力,让我在结束时先向有解决方案的天使说声谢谢。

其他人是否认为这不必要地困难?.....再次,TIA。

答案
  1. 我建议应用androidX迁移。因此,Toolbar包将是androidx.appcompat.widget.Toolbar和父活动androidx.appcompat.app.AppCompatActivity
  2. 使用setSupportActionBar(toolbar)方法而不是setActionBar中的onCreate或内部重写的setContentView方法
  3. 膨胀自定义菜单之前 super.onCreateOptionsMenu(menu)

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(/*menu res id*/)
        this.menu = menu;
        return super.onCreateOptionsMenu(menu)
    }
    

    通过这种设置,它应该可以工作

以上是关于Android工具栏和菜单让我发疯的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 上的 UIView 菜单

iPhone - 需要一些关于 EXC_BAD_ACCESS 的帮助,这让我发疯(包括完整的源代码)

导航菜单和在android中的选择性片段上添加按钮

标签菜单android - 不正确的调用片段

使用导航从工具栏菜单项单击在片段之间传递数据 - Kotlin

基本的 jQuery slideUp 和 slideDown 让我发疯!