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