📌  相关文章
📜  如何使用 Kotlin 在 Android 中创建选项菜单?(1)

📅  最后修改于: 2023-12-03 15:38:04.813000             🧑  作者: Mango

如何使用 Kotlin 在 Android 中创建选项菜单?

选项菜单是 Android 应用程序中常用的一种用户界面元素,它通常位于屏幕的顶部,在用户点击菜单按钮或按下设备上的菜单键时才会显示出来。本文将介绍如何使用 Kotlin 在 Android 中创建选项菜单。

准备工作

在开始编写代码之前,需要先创建一个新的 Android 项目。可以在 Android Studio 中创建或使用命令行工具创建。创建项目时,可以选择 Kotlin 作为编程语言。

创建菜单文件

在 res 目录下,创建一个名为 menu 的新目录,用于存放选项菜单文件。在该目录下创建一个新的 XML 文件,例如 menu_main.xml。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/menu_item1"
        android:title="@string/menu_item1_title"
        android:icon="@drawable/menu_item1_icon"
        android:showAsAction="always" />
    <item
        android:id="@+id/menu_item2"
        android:title="@string/menu_item2_title"
        android:icon="@drawable/menu_item2_icon"
        android:showAsAction="ifRoom" />
    <item
        android:id="@+id/menu_item3"
        android:title="@string/menu_item3_title"
        android:icon="@drawable/menu_item3_icon"
        android:showAsAction="never" />
</menu>

在该文件中定义了三个菜单项,分别对应 id 为 menu_item1、menu_item2 和 menu_item3,以及它们的标题和图标。其中,android:showAsAction 属性指定了菜单项应该以何种方式显示,例如 always 表示总是显示在工具栏中,ifRoom 表示如果屏幕空间足够时才显示在工具栏中,never 表示不显示在工具栏中。

菜单回调方法

在 Android 中,当用户点击菜单项时,会触发菜单回调方法。可以通过重写该方法来实现响应用户点击事件的逻辑。在 Activity 或 Fragment 中,可以通过覆盖以下方法来处理选项菜单:

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    // 加载选项菜单布局
    menuInflater.inflate(R.menu.menu_main, menu)
    return true
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    // 处理选项菜单点击事件
    when (item.itemId) {
        R.id.menu_item1 -> {
            // 处理第一个菜单项的点击事件
            return true
        }
        R.id.menu_item2 -> {
            // 处理第二个菜单项的点击事件
            return true
        }
        R.id.menu_item3 -> {
            // 处理第三个菜单项的点击事件
            return true
        }
        else -> return super.onOptionsItemSelected(item)
    }
}

在 onCreateOptionsMenu 方法中,首先调用 menuInflater.inflate() 方法加载菜单布局文件,并将加载的菜单项添加到 menu 对象中。该方法返回 true 表示选项菜单已经成功创建。在 onOptionsItemSelected 方法中,根据用户点击的菜单项 id,执行相应的处理逻辑。

添加菜单按钮

要使创建的选项菜单显示在屏幕上,需要在布局文件中添加一个菜单按钮,以便用户可以打开它。可以将菜单按钮添加到工具栏中或在屏幕其他位置上添加一个菜单按钮。在本文中,我们将菜单按钮添加到工具栏。

首先,在 res/values 目录下创建一个名为 styles.xml 的新文件。在该文件中添加以下样式定义:

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
    <item name="android:windowActionBar">true</item>
    <item name="android:windowNoTitle">false</item>
    <item name="android:toolbarStyle">@style/ToolbarStyle</item>
</style>

<style name="ToolbarStyle" parent="Widget.MaterialComponents.Toolbar">
    <item name="android:background">@color/colorPrimary</item>
    <item name="android:titleTextColor">@android:color/white</item>
    <item name="popupTheme">@style/ThemeOverlay.MaterialComponents.Light</item>
    <item name="android:menuButtonStyle">@style/MenuButtonStyle</item>
</style>

<style name="MenuButtonStyle" parent="Widget.AppCompat.Toolbar.Button.Menu">
    <item name="android:background">@drawable/ic_menu</item>
    <item name="android:tint">@android:color/white</item>
</style>

这里定义了两个自定义样式:ToolbarStyle 和 MenuButtonStyle。其中,ToolbarStyle 指定了工具栏的主题颜色和菜单按钮的主题颜色。MenuButtonStyle 指定了菜单按钮的图标和颜色。

然后,在布局文件中添加 Toolbar 视图,如下所示:

<androidx.appcompat.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    android:elevation="4dp"
    app:popupTheme="@style/ThemeOverlay.MaterialComponents.Light"
    app:theme="@style/ToolbarStyle"
    app:titleTextColor="@android:color/white" />

除了包含工具栏的基本配置外,我们将 app:theme 属性设置为之前定义的 ToolbarStyle,从而应用我们刚刚定义的样式。app:popupTheme 属性指定了浮动菜单的主题样式,在非 Material Design 设备上,会自动使用其它的样式。

最后,在 Kotlin 代码中,获取 Toolbar 对象并将其设置为活动的 ActionBar:

val toolbar: Toolbar = findViewById(R.id.toolbar)
setSupportActionBar(toolbar)

现在,菜单按钮已经准备好了,并且可以点击打开选项菜单了!

小结

在本文中,我们介绍了如何使用 Kotlin 在 Android 中创建选项菜单。首先,创建了一个菜单布局文件,然后在菜单回调方法中实现了响应用户点击事件的逻辑。最后,我们添加了一个菜单按钮到工具栏中,并将其设置为 ActionBar。