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。
- 我建议应用
androidX
迁移。因此,Toolbar
包将是androidx.appcompat.widget.Toolbar
和父活动androidx.appcompat.app.AppCompatActivity
- 使用
setSupportActionBar(toolbar)
方法而不是setActionBar
中的onCreate
或内部重写的setContentView
方法 膨胀自定义菜单之前
super.onCreateOptionsMenu(menu)
:override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(/*menu res id*/) this.menu = menu; return super.onCreateOptionsMenu(menu) }
通过这种设置,它应该可以工作
以上是关于Android工具栏和菜单让我发疯的主要内容,如果未能解决你的问题,请参考以下文章
iPhone - 需要一些关于 EXC_BAD_ACCESS 的帮助,这让我发疯(包括完整的源代码)