android工具栏上未显示菜单
背景 我创建了一个Java类,即android工具栏上未显示菜单,android,menu,Android,Menu,背景 我创建了一个Java类,即BaseActivity,它完成了实现菜单项和工具栏的所有基本工作。所有其他活动继承BaseActivity 问题 当我构建项目时,我可以看到工具栏,但没有菜单 代码 碱性 活动库 主要活动 但是,每次我介绍新活动时,我都必须包含它们。这一行setContentView(R.layout.Activity\u base)将被此行覆盖 setContentView(R.layout.activity\u main) 你无法通过你的方式实现你想要实现的目标。在做了几次
BaseActivity
,它完成了实现菜单项和工具栏的所有基本工作。所有其他活动继承BaseActivity
问题
当我构建项目时,我可以看到工具栏,但没有菜单
代码
碱性
活动库
主要活动
但是,每次我介绍新活动时,我都必须包含它们。这一行
setContentView(R.layout.Activity\u base)代码>将被此行覆盖
setContentView(R.layout.activity\u main)代码>
你无法通过你的方式实现你想要实现的目标。在做了几次挖掘之后,我找到了一个解决方案,它是:
基本活动
主要活动
您的输出是什么?正如我所说的,只有工具栏显示,没有菜单界面使用outputI编辑了问题,我不认为这是一个问题,因为
布局仍然可以工作。问题是您没有包括在基本活动中调用的布局,因为它已被覆盖。您的主要活动将包括一个空的@layout/activity\u base
。我认为@aiqency是正确的。BaseActivity
将基本布局充气,并将该工具栏设置为支持操作栏。然后,main活动
膨胀其布局,再次膨胀基本布局(创建第二个工具栏
),并将该视图设置为内容视图。因此,菜单设置在第一个工具栏上,但显示了第二个工具栏代码>在BaseActivity
中,我仍然在工具栏上没有菜单,因为您必须在MainActivity类上设置菜单
public class BaseActivity extends AppCompatActivity {
private Toolbar toolbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.main_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.about:
// code for about
break;
case R.id.exit:
// code for exit
}
return true;
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".BaseActivity">
<androidx.appcompat.widget.Toolbar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/toolbar"
android:background="@color/colorMatel"
android:elevation="@android:dimen/app_icon_size"
app:title="MyApplication"
app:popupTheme="@style/ToolBarPopupStyle"
app:theme="@style/ToolBarStyle" />
</RelativeLayout>
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<include layout="@layout/activity_base" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:title="@string/about"
android:id="@+id/about" />
<item
android:title="@string/exit"
android:id="@+id/exit" />
</menu>
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
public class BaseActivity extends AppCompatActivity {
// added this function
public void initToolbar(){
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// removed setContentView(R.layout.activity_base);
}
...
}
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initToolbar();
}
}