Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用AndroidX为活动创建选项菜单?_Java_Android_Android Layout_Android Menu - Fatal编程技术网

Java 如何使用AndroidX为活动创建选项菜单?

Java 如何使用AndroidX为活动创建选项菜单?,java,android,android-layout,android-menu,Java,Android,Android Layout,Android Menu,在阅读了大量android官方文档之后,我遇到了一个问题,那就是在没有使用android的情况下设置Appbar。有趣的是,菜单上的链接指向在onCreate()方法中使用工具栏对象。尽管最近我有一个工具栏可以使用,但我不需要工具栏对象的额外灵活性/自定义,而是选择使用各种菜单xml文件来执行我的活动问题是:我的选项菜单代码不会生成任何类型的Appbar。。。它只会产生一个顶部有任务栏(电池/时间栏)的空白白色屏幕 一般说明:我不希望支持旧的SDK(

在阅读了大量android官方文档之后,我遇到了一个问题,那就是在没有使用android的情况下设置Appbar。有趣的是,菜单上的链接指向在onCreate()方法中使用工具栏对象。尽管最近我有一个工具栏可以使用,但我不需要工具栏对象的额外灵活性/自定义,而是选择使用各种菜单xml文件来执行我的活动问题是:我的选项菜单代码不会生成任何类型的Appbar。。。它只会产生一个顶部有任务栏(电池/时间栏)的空白白色屏幕

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

以下代码/参考资料是我编写的:

app/[package]/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()中设置了断点,调试工具似乎并没有停在这里。也许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

    这是通过更改活动的布局文件以包含工具栏来实现的,如图所示。然后,可以使用本问题范围之外的技术适当修改工具栏的主题