如何在Android中用Java创建带有复选框的选项菜单

Android 菜单是每个现代 android 应用程序中最重要的组件之一,它提供了一种允许开发人员显示某些功能的方法,例如设置、搜索、关于应用程序等
。选项菜单是可用的菜单类型之一安卓。它位于某些 android 应用程序的工具栏上。选项菜单可能更复杂,并且可能需要额外的组件来执行某些功能。单选按钮、复选框等组件可以与菜单布局一起使用。但是,在本教程中,我们将构建一个带有多个复选框的深色选项菜单。
本教程将分为五 (5) 个步骤,以便于理解和指导。

第1步:创建一个新项目,文件/新建项目/输入应用程序的名称为MenuCheckBoxTutorial。

第2步:导航到res/layout/activity_main.xml,添加以下代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    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"
    android:orientation="vertical"
    android:background="#FF000000">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:padding="5dp"
        android:background="#FF000000">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            app:popupTheme="@style/PopUpDarkMenu"/>

    </android.support.design.widget.AppBarLayout>
</LinearLayout>

在第 2 步中,我们正在为线性布局和工具栏创建一个简单的深色布局,注意app:popupTheme="@style/PopUpDarkMenu"它将用于向我们的菜单添加样式的属性。

第3步:创建一个菜单文件 res/menu/menu_item.xml。

在 menu_item.xml 文件中,我们将定义菜单布局的内容。如果仔细看教程结果,第一个菜单项有一个子菜单,要在一个项下创建子菜单,我们将在第一个菜单项下创建一个新菜单。对于复选框,我们将使用android: clickable= "true";which 将用于在我们的菜单项上显示复选框图标。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/click_action"
        android:title="Click Action">
        <menu>
            <item
                android:id="@+id/item"
                android:title="Item"/>
        </menu>
    </item>
    <item
        android:id="@+id/hide_tracks"
        android:title="Hide Short Tracks"
        android:checkable="true"/>

    <item
        android:id="@+id/show_tracks"
        android:title="Show Track Duration"
        android:checkable="true"/>

    <item
        android:id="@+id/show_overflow"
        android:title="Show Overflow"
        android:checkable="true"/>

    <item
        android:id="@+id/round_corners"
        android:title="Round Corners"
        android:checkable="true"/>

    <item
        android:id="@+id/fast_scrollers"
        android:title="Fast Scroller"
        android:checkable="true"/>

    <item
        android:id="@+id/multi_select"
        android:title="Multi select"
        />

</menu>

第 4 步:导航到 res/values/style.xml 文件。

在 style.xml 文件中,我们将定义菜单的外观。创建一个名为“PopUpDarkMenu”的新样式并添加以下代码:

<resources>
   <style name="PopUpDarkMenu" parent="Theme.AppCompat.Light">
        <!-- Customize your theme here. -->
        <item name="android:textColor">#ffffff</item>
        <item name="android:colorBackground">#444444</item>

        <item name="colorControlNormal">#ffffff</item>   <!-- normal border color change as you wish -->
        <item name="colorControlActivated">#ffffff</item> <!-- activated color change as you wish -->       
    </style>

</resources>

android:textColor用于设置我们的菜单布局文本的颜色。
colorControlNormal用于设置复选框的边框颜色。
colorControlActivated用于设置选中复选框的颜色。

第 5 步:导航到 MainActivity.class。添加以下代码。

package com.mycompany.checkbox;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity
{

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

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

    @Override
    public boolean onCreateOptionsMenu (Menu menu)

    {
        getMenuInflater().inflate(R.menu.list_item, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected (MenuItem item)
    {
        switch (item.getItemId())
        {
            case R.id.hide_tracks:

                if (item.isChecked())
                {

                    item.setChecked(false);
                }
                else
                {
                    item.setChecked(true);
                    Toast.makeText(getApplication(), "Track Hidden", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.show_tracks:
                if (!item.isChecked())
                {
                    item.setChecked(true);

                    Toast.makeText(getApplication(), "Track Shown", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    item.setChecked(false);
                }
                break;
            case R.id.show_overflow:
                if (!item.isChecked())
                {
                    item.setChecked(true);

                    Toast.makeText(getApplication(), "Overflown", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    item.setChecked(false);
                }
                break;
            case R.id.round_corners:
                if (!item.isChecked())
                {
                    item.setChecked(true);

                    Toast.makeText(getApplication(), "Round Corners", Toast.LENGTH_SHORT).show();
                }
                else
                {
                    item.setChecked(false);
                }
                break;
            case R.id.fast_scrollers:
                if (!item.isChecked())
                {
                    item.setChecked(true);

                    Toast.makeText(getApplication(), "Fast Scrollers enabled", Toast.LENGTH_SHORT).show();
                }
                else
                {

            item.setChecked(false);
                }
                break;
        }
        return true;
    }
}

在上面的代码片段中,除了 oncreate 方法,我们还有另外两个方法,onCreateOptionMenu(Menu menu)onOptionItemSelected(Menu item)

这个onCreateOnptionMenu (Menu menu)函数接受一个参数,即我们的菜单。但是,为了创建菜单,我们需要将其膨胀到 activity_main.xml,这可以使用getMenuInflater().inflate()
inflate 方法来完成,该方法用于将我们的 menu_item.xml 布局传递给菜单对象。
The onCreateOptionMenu (Menu item)将返回一个布尔值,但由于本教程的原因,返回值为 true。
第二种方法是onOptionItemSelected (Menu item)
用于onCreateOnptionMenu (Menu menu)创建我们的菜单,onOptionItemSelected (Menu item)用于处理我们菜单中每个菜单项的 onclick 事件。它接受一个参数,它代表我们菜单列表中的特定项目。
用于查找与传递的 id 匹配的item.getItemById()任何项目 id,我们将使用 switch 语句来处理多个 id。
item.setChecked(boolean b)用于检查项目复选框是否被选中。

结论

了解菜单的工作原理将对开发人员有所帮助,在本教程中,我使用代码片段详细解释了如何在 Android 应用程序中的菜单上实现复选框。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值