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();    
     }
}