如何使用 AndroidX 为 Activity 创建选项菜单?

在阅读了大部分官方 android 文档后,我在不使用Toolbar 对象的情况下设置 Appbar 时遇到了麻烦。有趣的是,这个关于 Menus 的官方页面链接到在 onCreate() 方法中使用 Toolbar 对象。尽管我最近获得了一个工具栏来工作,但我不需要工具栏对象的额外灵活性/自定义,而是选择为我的活动使用各种菜单 xml 文件。问题是:我的选项菜单代码不会产生任何类型的 Appbar ......它只会产生一个空白的白色屏幕,上面有任务栏(电池/时间栏)。


一般说明:我不希望支持旧的 SDK (< 7)。此外,我正在使用的手机(LG Stylo3 7.0)在硬件中没有菜单按钮。我的目标是支持 minSdkVersion 21 和 targetSdkVersion 28。我也没有扩展片段。我写了许多其他活动,但如果没有适当的菜单导航,它们的内容就无法访问。


以下代码/资源是我写的:


应用程序/[包]/MainActivity.java


package [package];


import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuInflater;

import android.view.MenuItem;

import androidx.appcompat.app.AppCompatActivity;    

import [package].R;


public class MainActivity extends Activity {


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

    }


    @Override

    public boolean onCreateOptionsMenu(Menu menu) {

//        super.onCreateOptionsMenu(menu);

        MenuInflater inflater = getMenuInflater();

        inflater.inflate(R.menu.main_menu, menu);

        return true;

注意:我尝试在 onCreateOptionsMenu() 中调用 super 并在 return 语句中调用它。我也尝试过扩展 AppCompatActivity 而不是 Activity,但我不希望支持早期的 SDK 版本。我已经在 onCreateOptionsMenu() 中设置了断点,调试工具似乎并没有停在这里。也许 onCreateOptionsMenu() 不是从 onStart() 调用的?


res/menu/main_menu.xml


<menu 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"

    tools:context=".MainActivity" >


</menu>


注意:我在此布局中创建了一个工具栏对象,在此之前只工作这个问题与工具栏无关。AndroidStudio 确实允许我预览它,它是一个空白屏幕。

注意:我在 res/values/styles.xml 中尝试了各种带/不带 ActionBar 的 android:themes ... 特别是:(Theme.AppCompat.Light.DarkActionBar 和 Theme.AppCompat.NoActionBar)。前一个主题导致空白屏幕,后者导致深灰色。


如果需要我省略的其他文件进行进一步诊断,请告诉我。我的假设是它与我正在使用的约束布局有关。


catspeake
浏览 204回答 1
1回答

墨色风雨

更改 MainActivity.java 文件构造函数行以扩展 AppCompatActivitypublic&nbsp;class&nbsp;MainActivity&nbsp;extends&nbsp;AppCompatActivity&nbsp;{并将 android:theme 设置为 Theme.AppCompat* 的变体显示了我一直在努力展示的 MainActivity Appbar。接下来是我为找到合适的解决方案所做的更多研究。为什么会这样……是 AppCompatActivity 和基类 Activity 之间的区别。AppCompatActivity 继承自 Activity 并使用这些主题之一告诉应用程序使用本机 ActionBar 类来提供应用程序栏。一般来说,使用新的 Toolbar 对象似乎是最好的方法,因为它允许更多的自定义(截至 2019 年)。围绕此主题的大多数早期问题都使用过时/不推荐使用的代码,例如 ActionBarActivity。这是通过根据本文档更改 Activity 的布局文件以包含工具栏来实现的。然后可以使用此问题范围之外的技术适当地修改工具栏的主题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java