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

7 篇文章 0 订阅
4 篇文章 0 订阅

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 应用程序中的菜单上实现复选框。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值