Android 安卓的工具栏和菜单快把我逼疯了
我在ActivityXML文件中制作了一个工具栏(为了简洁起见被剪掉了) 这就是令人沮丧的地方。未调用上述覆盖。我做了大量的搜索,发现一个人建议修改活动类声明 他说,将“扩展活动”改为“扩展活动” 我检查了我的类声明,它已经是AppCompat了。一时兴起,我把它改成了活动 通过此更改,我现在可以在调试器中看到我的覆盖被调用。是的 但是我的菜单不见了 在我的activity.class中有以下几行文字(为了简洁起见剪掉): 由于这不再有效,我删除了toolbar.inflateMenu(),将其替换为getMenuInflater(),并将其置于覆盖中,如下所示Android 安卓的工具栏和菜单快把我逼疯了,android,android-studio,android-layout,android-toolbar,android-menu,Android,Android Studio,Android Layout,Android Toolbar,Android Menu,我在ActivityXML文件中制作了一个工具栏(为了简洁起见被剪掉了) 这就是令人沮丧的地方。未调用上述覆盖。我做了大量的搜索,发现一个人建议修改活动类声明 他说,将“扩展活动”改为“扩展活动” 我检查了我的类声明,它已经是AppCompat了。一时兴起,我把它改成了活动 通过此更改,我现在可以在调试器中看到我的覆盖被调用。是的 但是我的菜单不见了 在我的activity.class中有以下几行文字(为了简洁起见剪掉): 由于这不再有效,我删除了toolbar.inflateMenu(),将其
@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。。。。用于工具栏。充气菜单
没有快乐
我想要的是一个常规的工具栏,它有一个右对齐的标准按钮,有三个垂直的点,点击时会显示一个菜单
在这一点上,我是无知的,所以让我在结束之前先对有解决办法的天使说声谢谢
还有人认为这是不必要的困难吗?。。。。。再说一遍,蒂娅
androidX
迁移。所以工具栏
包将
androidx.appcompat.widget.Toolbar
和父活动的androidx.appcompat.app.AppCompatActivity
theme.AppCompat.NoActionBar
setSupportActionBar(工具栏)
method而不是setActionBar
中的onCreate
或内部重写的setContentView
方法super.onCreateOptions菜单(菜单)
之前对自定义菜单进行充气:
有了这样的设置,它应该可以工作我终于明白了。重复一下,我正在使用这个库: 导入android.widget.Toolbar 因为我想使用活动,而不是AppCompatActivity 因此xml声明如下所示:
因为我们使用的是工具栏,所以我们必须删除Android提供给我们的默认操作栏。这需要编辑应用程序清单。
任何您找到“AppTheme.ActionBar”的地方,请更改为“AppTheme.NoActionBar”
在java类中,我有:
protected void onCreate(Bundle savedInstanceState) {
Toolbar toolbar = findViewById(R.id.mytoolbar);
setActionBar( toolbar );
}
请注意“setActionBar”的用法与“setSupportActionBar”的用法相反。这是正确的
然后是(最后!)正确编码的覆盖,无论您选择什么导入库,它都可能为任何人提供信息:
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
super.onPrepareOptionsMenu( menu );
if ( !bMenuInitialized ) {
this.menu = menu;
getMenuInflater().inflate( R.menu.home_mainmenu, menu );
bMenuInitialized = true;
}
/*
invalidateOptionsMenu();
toolbar.inflateMenu( R.menu.home_mainmenu );
*/
return true;
}
我在评论区留下了不该做的事。调用invalidateOptionsMenu()会导致无限循环,这在internet上随处可见。不要那样做。。。。。如果您以某种方式更改了菜单,则只能从其他代码块调用InvalidateOptions菜单。这就是工具栏无法显示的原因。(我所说的“更改菜单”并不是指在菜单项上设置属性。)
我还了解到,您必须创建一个标志来指示菜单是否已膨胀,因为每次用户访问工具栏时都会调用onPrepareOptions菜单()。你不想每次都不断地膨胀你的菜单,因为它只是增加了已经在菜单中的菜单,使它越来越长
给你。我希望这对某人有帮助。感谢所有回答您的人。请在以后为您的问题提供一个有效的标题,这无助于任何人理解您想要达到的目的,标题应该描述问题,而不使用不必要的信息。
@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;
}
override fun onCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(/*menu res id*/)
this.menu = menu;
return super.onCreateOptionsMenu(menu)
}
protected void onCreate(Bundle savedInstanceState) {
Toolbar toolbar = findViewById(R.id.mytoolbar);
setActionBar( toolbar );
}
@Override
public boolean onPrepareOptionsMenu (Menu menu) {
super.onPrepareOptionsMenu( menu );
if ( !bMenuInitialized ) {
this.menu = menu;
getMenuInflater().inflate( R.menu.home_mainmenu, menu );
bMenuInitialized = true;
}
/*
invalidateOptionsMenu();
toolbar.inflateMenu( R.menu.home_mainmenu );
*/
return true;
}