gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:03:52 27 4
gpt4 key购买 nike

在阅读了大部分官方 android 文档之后,我在使用 Toolbar object 设置 Appbar 时遇到了麻烦。 .有趣的是,this official page on Menus 链接到在 onCreate() 方法中使用 Toolbar 对象。虽然我最近得到了一个 Toolbar 来工作,但我不需要 Toolbar 对象的额外灵 active /自定义,而是选择为我的 Activity 使用各种菜单 xml 文件。 问题是:我的选项菜单代码不会产生任何类型的应用栏...它只会产生一个空白屏幕,顶部是任务栏(电池/时间栏)。

一般注意事项:我不打算支持旧的 SDK (< 7)。此外,我使用的手机 (LG Stylo3 7.0) 在硬件上没有菜单按钮。 我的目标是支持 minSdkVersion 21,targetSdkVersion 28。我也没有扩展 fragment 。我写了很多其他 Activity ,尽管如果没有适当的菜单导航就无法访问它们的内容。

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

应用/[包]/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" >

<item android:id="@+id/action_servers"
android:icon="@drawable/ic_action_server"
android:title="@string/action_server"
app:showAsAction="ifRoom" />

<item android:id="@+id/action_settings"
android:icon="@drawable/ic_action_settings"
android:title="@string/action_settings"
app:showAsAction="ifRoom"/>
</menu>

注意:AndroidStudio 可以毫无问题地预览此 xml。

res/layout/activity_main.xml

<androidx.constraintlayout.widget.ConstraintLayout
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:id="@+id/swipe_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!-- Some commented out stuff for now -->

</androidx.constraintlayout.widget.ConstraintLayout>

注意:我已经在此布局中创建了一个 Toolbar 对象,在此之前它确实有效,但这个问题与 Toolbars 无关。 AndroidStudio 确实允许我预览它,它是一个空白屏幕。

AndroidManifest.xml

<application
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

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

如果我遗漏的其他文件需要进一步诊断,请告诉我。我的假设是它与我正在使用的 constraintLayout 有关。

这些是我查看过但对解决我的问题没有帮助的页面:

  1. > Implementing an option menu in Android Studio
  2. > Add a menu to an empty activity
  3. > Activity does not have an options menu -- 不想使用工具栏!
  4. > how to display an option menu when an activity starts

最佳答案

更改 MainActivity.java 文件构造函数行以扩展 AppCompatActivity

public class MainActivity extends AppCompatActivity {

并将 android:theme 设置为 Theme.AppCompat* 的变体显示了我一直在努力显示的 MainActivity Appbar。接下来是我为找到合适的解决方案所做的更多研究。

Why this works...是 AppCompatActivity 和基类 Activity 的区别。 AppCompatActivity 继承自 Activity 并使用这些主题之一告诉应用程序使用 native ActionBar 类来提供应用程序栏。一般来说,使用新的 Toolbar 对象似乎是最好的方法,因为它允许进行更多自定义(截至 2019 年)。大多数围绕此主题的早期问题使用过时/弃用的代码,例如 ActionBarActivity。

这是通过更改 Activity 的布局文件以根据此 documentation 包含工具栏来实现的.然后可以使用超出此问题范围的技术适当修改工具栏的主题。

关于java - 如何使用 AndroidX 为 Activity 创建选项菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54934514/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com