【问题标题】:How to display option menu without three dots android? Need to remove three dot menu and display option menu at bottom如何显示没有三点android的选项菜单?需要去掉三点菜单并在底部显示选项菜单
【发布时间】:2021-08-05 11:42:24
【问题描述】:

通常的行为:

当我们创建选项时,我们通常有三个点,当我们点击三个点按钮时,会显示选项菜单。我的底部也有按钮。当我单击按钮时,会显示选项菜单

我的要求:

当我们创建选项时,如何显示选项菜单没有三个点。因为我在底部有按钮,当我点击按钮时,选项菜单正在显示。但我只需要删除三个点。(汉堡菜单)因为我的要求是,我需要使用底部存在菜单的旧类型,当我们单击底部菜单时,它会在 androidxappcompat 活动中显示溢出菜单。

更新: 我使用 getSupportActionBar() 来隐藏菜单。但我需要移动底部的选项菜单。

 needsMenuKey = appliInfo.metaData.getBoolean("com.package.name");
                Log.i("MainActivity", "needsMenuKey[" + needsMenuKey + "]");
                if (needsMenuKey) {
                    if (getSupportActionBar() != null) {
                        getSupportActionBar().hide();
                    }

【问题讨论】:

  • 你想看到什么而不是三个点?而且我不确定您是在谈论 ≡ (汉堡包)还是...(三个点)按钮,因为您提到两者时好像它们是同一个东西。一般来说,如果您在视图布局中使用工具栏而不是原生操作栏,您可以更好地控制应用栏的行为。
  • 我不想显示三点菜单。相反,我在底部有按钮。所以当我点击按钮时,它应该显示溢出菜单选项。
  • 三个点和汉堡有区别...汉堡也可以说是side menu,三个点是属于option menu的东西,在右上角appBar 或工具栏,当你按下它时,下拉菜单会出现在你选择任何选项的地方,现在提到你在谈论哪个?什么是底部?你的意思是底部导航?
  • 下拉菜单显示在底部,三个选项应该消失。附上截图。目前它显示在左上角。
  • 你想把这个仪表图标放在系统底部导航栏上吗?

标签: android kotlin android-menu android-optionsmenu


【解决方案1】:

您应该使用 NoActionBar 主题或覆盖 onCreateOptionsMenu() 并返回 false 而不调用 super.onCreateOptionsMenu()。我希望这些解决方案之一对您有用。如果是,请将此标记为答案。

【讨论】:

  • 即使选项菜单可用?
  • @Shadow 您正在使用 XML 资源创建菜单,对吗?因此,在您自己的函数中膨胀菜单并在单击按钮时显示它。通过这样做,您无需依赖 Activity 来为您扩展菜单。当 Activity 没有使菜单膨胀时,三点指示器不会出现。
【解决方案2】:

所以,总结一下需求:

  • 从顶部移除三点图标。相反,有一个显示溢出选项菜单的底部按钮。
  • 点击底部按钮时,将选项溢出菜单定位到底部(而不是顶部)。

系统溢出选项菜单应该锚定到它所在的actionBar/toolBar;因此,除非您也将此栏移到底部,否则您无法在底部显示此菜单。否则你需要创建一个自定义的弹出菜单而不是系统菜单。

所以,这里的解决方案是在activity底部创建一个自定义的Toolbar

布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:layout_constraintBottom_toBottomOf="parent">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    </com.google.android.material.appbar.AppBarLayout>


</androidx.constraintlayout.widget.ConstraintLayout>

这需要在themes.xmlstyles.xml 使用NoActionBar 主题,例如: Theme.MaterialComponents.DayNight.NoActionBarTheme.AppCompat.DayNight.NoActionBar

并在行为中设置新的supportActionBar

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val toolbar = findViewById<Toolbar>(R.id.toolbar)
        setSupportActionBar(toolbar)
        title = ""

    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.menu_main, menu)
        return true
    }

}

这满足了上面提到的要求,除了新的supportActionBar 现在位于底部,因此您可能需要在顶部添加另一个工具栏以根据需要进行自定义。

为了用仪表图标代替底部的三点图标,有multiple answers here,这里是一个:

添加以下样式:

<style name="customoverflow">
    <item name="android:src">@drawable/ic_baseline_settings_24</item>
</style>

将其应用到主题中:

<item name="android:actionOverflowButtonStyle">@style/customoverflow</item>

您还可以将paddingEnd 添加到toolBar 以在图标和屏幕远端之间留出一些空间:

<androidx.appcompat.widget.Toolbar
    ...
    android:paddingEnd="16dp"
    android:paddingRight="16dp"/>

【讨论】:

    猜你喜欢
    • 2014-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多