如何使我的溢出动作与设置为ActionBar的MaterialToolbar一起出现?

问题描述

我的MainActivity使用MaterialToolbar作为其顶部应用程序栏。但是,一旦我致电setSupportActionBar,“溢出操作”按钮(三个点)就会消失,并且我看不到或单击它。

但是,如果我不打setSupportActionBar,按钮就会出现。我不喜欢这种解决方案,因为当我只想简单地使用Toolbar.onMenuItemClickListenerAppCompatActivity.onoptionsMenuSelected时,它会迫使我使用setSupportActionBar,因为这是应用程序其余部分的构建方式。>

我的layout/activity_main代码

<androidx.coordinatorlayout.widget.CoordinatorLayout 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">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/layout_appbar_main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.appbar.MaterialToolbar
            android:id="@+id/toolbar_main"
            style="@style/Widget.MaterialComponents.Toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:menu="@menu/menu_top_app_bar"
            app:title="@string/app_name" />
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    ...
    ...
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

我的menu/menu_top_app_bar代码

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- Settings,should always be in the overflow -->
    <item
        android:id="@+id/action_settings"
        android:title="@string/action_settings"
        app:showAsAction="never" />
</menu>

这是MainActivity的实现,不起作用。溢出菜单选项不会显示

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setonClickListener(this);

        mTextLayout = findViewById(R.id.text_layout);
       
        Toolbar toolbar = findViewById(R.id.toolbar_main);
        setSupportActionBar(toolbar);
    }

    @Override
    public boolean onoptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                Intent intent = new Intent(this,SettingsActivity.class);
                startActivity(intent);
                return true;
            default:
                // UnkNown; allow superclass to handle
                return super.onoptionsItemSelected(item);
        }
    }

此实现确实有效,但我希望上述方法可以起作用:

public class MainActivity extends AppCompatActivity implements View.OnClickListener,Toolbar.OnMenuItemClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        findViewById(R.id.button).setonClickListener(this);

        TextLayout = findViewById(R.id.text_layout);

        Toolbar toolbar = findViewById(R.id.toolbar_main);
        // setSupportActionBar(toolbar);
        toolbar.setonMenuItemClickListener(this);
    }

    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                Intent intent = new Intent(this,SettingsActivity.class);
                startActivity(intent);
                return true;
            default:
                return false;
        }
    }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)