Java 如何使用AndroidX为活动创建选项菜单?
在阅读了大量android官方文档之后,我遇到了一个问题,那就是在没有使用android的情况下设置Appbar。有趣的是,菜单上的链接指向在onCreate()方法中使用工具栏对象。尽管最近我有一个工具栏可以使用,但我不需要工具栏对象的额外灵活性/自定义,而是选择使用各种菜单xml文件来执行我的活动问题是:我的选项菜单代码不会生成任何类型的Appbar。。。它只会产生一个顶部有任务栏(电池/时间栏)的空白白色屏幕 一般说明:我不希望支持旧的SDK(<7)。另外,我使用的手机(LG Stylo3 7.0)在硬件上没有菜单按钮我的目标是支持minSdkVersion 21和targetSdkVersion 28。我也没有扩展片段。我还写了很多其他的活动,尽管如果没有合适的菜单导航,它们的内容是无法访问的 以下代码/参考资料是我编写的: app/[package]/MainActivity.javaJava 如何使用AndroidX为活动创建选项菜单?,java,android,android-layout,android-menu,Java,Android,Android Layout,Android Menu,在阅读了大量android官方文档之后,我遇到了一个问题,那就是在没有使用android的情况下设置Appbar。有趣的是,菜单上的链接指向在onCreate()方法中使用工具栏对象。尽管最近我有一个工具栏可以使用,但我不需要工具栏对象的额外灵活性/自定义,而是选择使用各种菜单xml文件来执行我的活动问题是:我的选项菜单代码不会生成任何类型的Appbar。。。它只会产生一个顶部有任务栏(电池/时间栏)的空白白色屏幕 一般说明:我不希望支持旧的SDK(
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()中设置了断点,调试工具似乎并没有停在这里。也许OnCreateOptions菜单()没有从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>
<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>
<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>
注意:AndroidStudio能够预览此xml而没有任何问题
res/layout/activity\u main.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>
<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>
<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>
--不想使用工具栏李>
更改MainActivity.java文件构造函数行以扩展AppActivity
public class MainActivity extends AppCompatActivity {
并将android:theme设置为theme.AppCompat*的变体,显示我一直在努力显示的MainActivity Appbar。下面是我为找到一个合适的解决方案而做的更多研究
是AppCompatActivity和基类Activity之间的区别。AppCompatActivity继承自Activity,使用其中一个主题会告诉应用程序使用本机ActionBar类来提供应用程序栏。一般来说,使用新工具栏对象似乎是最好的方式,因为它允许更多的定制(从2019年开始)。围绕此主题的大多数早期问题都使用过时/不推荐的代码,如ActionBarActivity
这是通过更改活动的布局文件以包含工具栏来实现的,如图所示。然后,可以使用本问题范围之外的技术适当修改工具栏的主题