Android | 第 3 章 | Menu & AlertDialog | 知识点汇总 | +Demo

运行环境Android Studio 2020.3.1文章目录运行环境1. Menu组件1.1 Option Menus1.2 Context Menus2. AlertDialog警告对话框3. Android 案例2.1 实现右上角菜单2.2 实现列表框菜单的增添和删除选项2.3 点击按钮显示一个弹窗2.4 在弹窗中修改文本框信息2.5 实现在弹窗中选择爱好*2.6 实现类似通讯录的可修改的景区列表(1) 项目结构(2) UI部分(3) 后端部分1. Menu组件参考资料:>>
摘要由CSDN通过智能技术生成

运行环境


Android Studio 2020.3.1
在这里插入图片描述

1. Menu组件


参考资料:>>传送门<<

Menu组件是管理菜单项目的一个interface接口,所以在使用时,重写方法就好。

任何Activity活动都支持设置响应或设置的菜单,可添加项目在菜单并且可以添加单击事件。

添加菜单项的最简单方法是通过Activity类,在类中重写方法 onOptionsSelected(MenuItem)onContextItemSelected(MenuItem)

不同的菜单组件有着不同的功能。

Context Menus Option Menus Sub Menus
快捷方式 ×
项目图标 × ×
嵌套子菜单 ×
项目选择标记 ×

1.1 Option Menus


参考资料:>> 传送门 <<

该组件通常配合一个独立的Menu菜单布局文件,它的最大特点是不支持选项标记。

如何实现该菜单?主要分为两步:1. 设置布局填充 ->2. 设置菜单项响应事件

显示一个菜单必然需要一个载体。

Step 1. 填充布局的方法 public boolean onCreateOptionsMenu (Menu menu) (仅执行一次)

范例 :使用 menu_option.xml 填充菜单布局

menu_option.xml

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

    <item
        android:id="@+id/menu_option_insert"
        android:icon="@android:drawable/ic_input_add"
        android:title="添加"
        android:visible="true"
        app:showAsAction="always" />

    <item
        android:id="@+id/menu_option_reset"
        android:title="初始化" />

</menu>

MainActivity.java

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
   
        getMenuInflater().inflate(R.menu.menu_option, menu);
        return super.onCreateOptionsMenu(menu);
    }

Step 2. 菜单项单击时的响应方法 public boolean onOptionsItemSelected(@NonNull MenuItem item)

public boolean onOptionsItemSelected(@NonNull MenuItem item) {
   
    switch (item.getItemId()){
   
        case R.id.option1:
            //...
            break;
        case R.id.option2:
            //...
            break;
    }
    return super.onOptionsItemSelected(item);
}

只需重写两个方法,就能实现右上角菜单。

1.2 Context Menus

该组件不支持快捷方式和项目图标,不过可以嵌套子菜单和项目的选项标记。

如何实现该菜单?分为三步:1. 绑定组件 -> 2. 填充布局 -> 3. 选项响应

不同于之前的Options Menu,它不会出现在主界面的右上角,所以需要有能使其出现的一个方式,比如单击按钮、长按列表框等。

Step 1. 绑定组件 registerForContextMenu(R.id.findViewById(R.id.listView));

Step 2. 填充布局 public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)(每次都调用)

    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
   
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.menu_listview, menu);
    }

Step 3. 选项响应 public boolean onContextItemSelected(@NonNull MenuItem item)

    @Override
    public boolean onContextItemSelected(@NonNull MenuItem item) {
   
        // 获取菜单点击项的序号
        int pos = ((AdapterView.AdapterContextMenuInfo)
                item.getMenuInfo()).position;
        // 根据不同选项处理逻辑...
        switch (item.getItemId()) {
   
            case R.id.menu_insert:
              
                break;
            case R.id.menu_delete:
                
                break;

        }
        return super.onContextItemSelected(item);
    }

2. AlertDialog警告对话框


参考资料:>>传送门<<

在这里插入图片描述

观察上图,AltertDialog类实现了接口Dialoginterface,这个接口的作用是在设置弹窗的响应事件,比如点击确认按钮后,主界面的组件发生相应的改变。

如何创建一个弹窗?通过AlertDialog.Builder()对象

范例:创建并显示一个空弹窗

new AlertDialog.Builder(context).create().show()

设置一个弹窗的信息,通常是对Builder对象使用set方法,最后在调用其create()方法生成一个AlertDialog对象。

官方文档介绍了许多关于Builder类的set方法,在这里列举几个:

方法名 作用描述
create() 返回一个AlertDialog对象
setMultiChoiceItems() 设置要在对话框中显示的项目列表作为内容。
setPositiveButton() 设置确认按钮的标题和响应事件
setNegativeButton() 设置取消按钮的标题和响应事件
setView() 为对话框设置视图

3. Android 案例


示例:创建Menu的布局文件

创建Menu组件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.1 实现右上角菜单


最终效果:

在这里插入图片描述

option_menu.xml

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

    <item
        android:id="@+id/option1"
        android:title="选项1:Java" />
    <item
        android:id="@+id/option2"
        android:title="选项2:Python"
    />
    <item
        android:id="@+id/option3"
        android:title="选项3:C++"
    />
</menu>

layout_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text=""
        />
</LinearLayout>

MainActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {
   
    TextView tv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_main);
        tv = findViewById(R.id.textView);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
   
        getMenuInflater().inflate(R.menu.option_menu, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
   
        switch (item.getItemId()){
   
            case R.id.option1:
                tv.setText("Java");
                break;
            case R.id.option2:
                tv.setText("Python");
                break;
            case R.id.option3:
                tv.setText("C++");
                break;

        }
        return super.onOptionsItemSelected(item);
    }
}

2.2 实现列表框菜单的增添和删除选项


最终效果:

在这里插入图片描述

menu_listview.xml

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


    <item
        android:id="@+id/menu_insert"
        android:title="添加随机项" />
    <item
        android:id="@+id/menu_delete"
        android:title="删除" />
</menu>

layout_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/main_lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

MainActivity.java

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;

import java.util.ArrayList;
import java.util.Random;

public class MainActivity extends AppCompatActivity {
   

    ArrayList<Str
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值