【发布时间】:2020-05-12 08:00:26
【问题描述】:
我在 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。
有了这个改变,我现在可以在调试器中看到我的覆盖被调用了。是的!
但是找不到我的菜单!
在我的 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。
【问题讨论】:
-
请在以后给你的问题一个有效的标题,这无助于任何人理解你想要达到的目标
-
是的,标题应该描述问题而不使用不必要的信息。
标签: android android-studio android-layout android-toolbar android-menu