android 中工具栏上未显示菜单
Menu not showing on toolbar in android
背景
我创建了一个 Java class,即 BaseActivity
,它完成了实现菜单项和工具栏的所有基本工作。所有其他活动继承 BaseActivity
。
问题
当我构建项目时,我可以看到工具栏但没有菜单。
代码
基本Activity
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;
}
}
activity_base
<?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>
主要Activity
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
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>
main_menu
<?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>
输出
编辑:
将这些代码行从 BaseActivity
移动到 MainActivity
解决了问题:
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
但是每次我介绍新的东西时我都必须包括它们 Activity。
这一行 setContentView(R.layout.activity_base);
将被这一行覆盖
setContentView(R.layout.activity_main);
.
您无法按照自己的方式实现您想要做的事情。
经过几次挖掘后,我找到了解决方案,这里是:
BaseActivity
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);
}
...
}
MainActivity
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initToolbar();
}
}
背景
我创建了一个 Java class,即 BaseActivity
,它完成了实现菜单项和工具栏的所有基本工作。所有其他活动继承 BaseActivity
。
问题
当我构建项目时,我可以看到工具栏但没有菜单。
代码
基本Activity
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;
}
}
activity_base
<?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>
主要Activity
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
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>
main_menu
<?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>
输出
编辑:
将这些代码行从 BaseActivity
移动到 MainActivity
解决了问题:
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
但是每次我介绍新的东西时我都必须包括它们 Activity。
这一行 setContentView(R.layout.activity_base);
将被这一行覆盖
setContentView(R.layout.activity_main);
.
您无法按照自己的方式实现您想要做的事情。
经过几次挖掘后,我找到了解决方案,这里是:
BaseActivity
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);
}
...
}
MainActivity
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initToolbar();
}
}