Android开发基础:对话框,Toast,Notification的使用 选项菜单,上下文菜单,弹出式菜单的使用

本文主要是介绍Android开发基础:对话框,Toast,Notification的使用 选项菜单,上下文菜单,弹出式菜单的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一,Android提示消息

1.提示消息的形式

 2.对话框

(1)默认对话框的创建步骤

(2) 自定义对话框的创建步骤

3.Toast

4.Notification

二,菜单

1.选项菜单 OptionsMenu

2.上下文菜单 ContextMenu

3.弹出式菜单 PopupMenu

 三,可能会遇到的一些小问题

1.报错:Call requires API level 26 (current min is 24): new android.app.NotificationChannel

 2.Notification通知没反应


一,Android提示消息

1.提示消息的形式

Android中系统经常会向用户反馈一些提示信息,其展现形式可以分为以下几种:

  1. 对话框:以弹出层强制用户作出响应
  2. Toast:显示提示信息,用户不用响应
  3. Notification:在状态栏显示已通知信息,除非用户查看信息或删除信息,否则一直在状态栏显示。

 2.对话框

        对话框是以弹出层形式显示内容的视图控件,一般在监听器中使用。对话框的应用也很广泛,很多应用的"新版本"信息、退出时提示、列表项目附加信息等等都是使用对话框形式展现的。在Android中使用AlertDialog类来实现对话框的创建。

(1)默认对话框的创建步骤

  1. 创建AlertDialog.Builder(AlertDialog的创建器)对象,AlertDialog对象需要通过创建器来创建;
  2. 调用AlertDialog.Builder对象的方法为对话框设置属性(图标,标题,内容,按钮等);
  3. 调用AlertDialog.Builder对象的create方法创建对话框;
  4. 调用AlertDialog.Builder对象的show方法创建对话框;
private void showDialog() {//创建对话框构造器对象AlertDialog.Builder dialog_build = new AlertDialog.Builder(this).setTitle("关闭应用!").setMessage("确定要关闭应用吗?").setIcon(R.mipmap.genshin).setCancelable(false) //点击屏幕外围不关闭.setPositiveButton("确定",new DialogInterface.OnClickListener() {//确定按钮@Overridepublic void onClick(DialogInterface dialog, int which) {//Toast.makeText(NoticeActivity.this, "启动成功!", Toast.LENGTH_SHORT).show();// 关闭当前ActivityNoticeActivity.this.finish();}}).setNegativeButton("取消", new DialogInterface.OnClickListener() {//取消按钮@Overridepublic void onClick(DialogInterface dialog, int which) {//Toast.makeText(NoticeActivity.this, "启动失败!", Toast.LENGTH_SHORT).show();// 关闭对话框dialog.dismiss();}});//通过构造器构造对话框对象AlertDialog dialog = dialog_build.create();//显示对话框dialog.show();
}

(2) 自定义对话框的创建步骤

对话框的样式也可以自己设置,只需要给AlertDialog.Builder提供布局文件即可。

创建自定义对话框的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试消息"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试按钮"/></LinearLayout>

给AlertDialog.Builder绑定布局文件:

private void showCustomDialog() {//设置对话框自定义视图AlertDialog.Builder customDialogBuild = new AlertDialog.Builder(this).setView(getCustomView());AlertDialog customDialog = customDialogBuild.create();customDialog.show();
}
//获取布局View
private View getCustomView() {View view = LayoutInflater.from(this).inflate(R.layout.custom_view_layout, null);return view;
}

3.Toast

        Toast不干扰用户操作,不需要用户响应(也不可交互),显示时间较短,会自动消失。一般在事件监听器中使用(即当特定事件触发时,显示Toast消息)。

Toast使用基本流程:

  1. 创建Toast;
  2. 设置基本属性(上下文,显示内容,显示时长);
  3. 显示Toast;
btn_notice.setOnClickListener(new View.OnClickListener() {Toast.makeText(this, "启动成功!", Toast.LENGTH_SHORT).show();
});

 Toast可以通过Toast.setView()来自定义界面,不过不常用。

4.Notification

        Notification在状态栏显示提示信息,除非用户查看或关闭信息,状态栏才取消显示。一般使用在收到短信后、收到应用的推送消息后、收到未接电话等场合。Notification需要借助NotificationManager(通知管理器)来实现。

实现Notification,需要用到以下几个类:

  1. NotificationManager:通知管理器,调用notify()方法可以向系统发送通知;
  2. Notification.Builder:通知创建器,Notification对象通过创建器来创建;
  3. Notification:通知类,保存通知相关信息(大图标,小图标,标题,通知信息等);
  4. NotificationChannel:通知渠道,Android API 26引入的新特性,当minSdk小于26时将无法使用。构造Notification对象时必须传入一个通知渠道;

 Notification使用的基本流程:

(1)通过通知管理器获取通知服务(NotificationManager):

//获取通知服务
NotificationManager notificationManager = (NotificationManager) getApplication().getSystemService(Context.NOTIFICATION_SERVICE
);

(2)创建通知渠道(NotificationChannel),并设置相关属性:

//创建通知渠道
NotificationChannel channel = new NotificationChannel("channelId",    //渠道id"channelName",  //渠道名称notificationManager.IMPORTANCE_DEFAULT  //重要级别
);

(3)关联通知服务和通知渠道:

//关联通知服务和通知渠道
notificationManager.createNotificationChannel(channel);

(4)创建通知创建器(Notification.Builder),设置相关信息(图标,标题,通知信息等):

//创建通知构造器对象
Notification.Builder notificationBuilder = new Notification.Builder(this,"channelId"
).setSmallIcon(R.mipmap.genshin).setContentTitle("启动原神!").setContentText("您今天启动原神了吗?");

(5)通过创建器创建通知对象(Notification):

//通过构造器创建通知对象
Notification notification = notificationBuilder.build();

(6)调用通知管理器发送通知:

//由通知服务发布通知消息
notificationManager.notify(0, notification);

二,菜单

        菜单:显示一个应用程序的主界面中不是直接可见的额外选项的视图组件。在Android中支持三种菜单类型:

  1. 选项菜单(在主窗口点击”Menu“弹出的菜单);
  2. 上下文菜单(长按某个控件时弹出的菜单);
  3. 弹出式菜单(点击某个控件时弹出的菜单);

1.选项菜单 OptionsMenu

        在主窗口点击”Menu“弹出的菜单,一般包含若干个子菜单,即用户点击”选项菜单“中的某一项时,弹出的附加菜单。

选项菜单实现方法:

(1)创建菜单布局文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><item android:title="文件" android:id="@+id/menu_file"><menu><item android:title="打开" android:id="@+id/menu_open"></item><item android:title="保存" android:id="@+id/menu_save"></item></menu></item><item android:title="操作" android:id="@+id/menu_action"><menu><item android:title="复制" android:id="@+id/menu_copy"></item><item android:title="粘贴" android:id="@+id/menu_paste"></item></menu></item></menu>

(2)在Activity中创建菜单,传入菜单布局文件(onCreateOptionsMenu方法):

//选项菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.layout_menu, menu);return super.onCreateOptionsMenu(menu);
}

(3)绑定菜单项选择事件,即点击菜单项后会发生的事情(onOptionsItemSelected方法):

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {switch(item.getItemId()){case R.id.menu_open:Log.i("menu", "打开文件成功");break;case R.id.menu_save:Log.i("menu", "保存文件成功");break;case R.id.menu_copy:Log.i("menu", "复制成功");break;case R.id.menu_paste:Log.i("menu", "粘贴成功");break;}return super.onOptionsItemSelected(item);
}

2.上下文菜单 ContextMenu

        长按某个控件时弹出的菜单,因此上下文菜单必须与某个控件绑定在一起,实现步骤与选项菜单基本一致,只多了一步绑定控件。

(1)在Activity中创建上下文菜单(onCreateContextMenu)传入布局文件(布局文件与上面一致),并绑定菜单项选择事件(onContextItemSelected):

//上下文菜单
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {getMenuInflater().inflate(R.menu.layout_menu, menu);super.onCreateContextMenu(menu, v, menuInfo);
}@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {switch(item.getItemId()){case R.id.menu_open:Log.i("menu", "打开文件成功");break;case R.id.menu_save:Log.i("menu", "保存文件成功");break;case R.id.menu_copy:Log.i("menu", "复制成功");break;case R.id.menu_paste:Log.i("menu", "粘贴成功");break;}return super.onContextItemSelected(item);
}

(2)在onCreate中绑定视图控件(registerForContextMenu):

//上下文菜单比选项菜单多一步注册控件
Button btn_context_menu = findViewById(R.id.btn_context_menu);
registerForContextMenu(btn_context_menu);

3.弹出式菜单 PopupMenu

PopupMenu可以非常方便的在指定view的下面显示一个弹出菜单,使用步骤如下:

(1)创建弹出式菜单对象,传入上下文和控件id:

//创建弹出式菜单对象
PopupMenu popupMenu = new PopupMenu(this, btn_pop_menu);

(2)加载菜单布局,传入菜单布局文件:

//加载菜单布局
popupMenu.getMenuInflater().inflate(R.menu.layout_menu, popupMenu.getMenu());

(3)设置菜单项选择事件,返回是否解决事件:

//设置菜单点击事件
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {@Overridepublic boolean onMenuItemClick(MenuItem item) {switch(item.getItemId()){case R.id.menu_open:Log.i("menu", "打开文件成功");break;case R.id.menu_save:Log.i("menu", "保存文件成功");break;case R.id.menu_copy:Log.i("menu", "复制成功");break;case R.id.menu_paste:Log.i("menu", "粘贴成功");break;}//返回是否解决事件return true;}
});

(2)设置按钮监听事件:

//设置按钮监听事件
btn_pop_menu.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {popupMenu.show();}
});

 三,可能会遇到的一些小问题

1.报错:Call requires API level 26 (current min is 24): new android.app.NotificationChannel

        在使用NotificationChannel通知渠道以及与其相关的方法时,可能会遇到这个报错,这是因为NotificationChannel是Android API 26引入的新特性,小于这个版本就会遇到这个报错,在build.gradle界面将minSdk改为26,报错就消失。

 2.Notification通知没反应

        Notification通知没反应,如果代码实现没问题的话,大概率是因为通知权限没打开,在setting->Apps->(找到对应app)->Notifications->打开All practice notifications,打开通知权限即可。

这篇关于Android开发基础:对话框,Toast,Notification的使用 选项菜单,上下文菜单,弹出式菜单的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/898542

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

OpenHarmony鸿蒙开发( Beta5.0)无感配网详解

1、简介 无感配网是指在设备联网过程中无需输入热点相关账号信息,即可快速实现设备配网,是一种兼顾高效性、可靠性和安全性的配网方式。 2、配网原理 2.1 通信原理 手机和智能设备之间的信息传递,利用特有的NAN协议实现。利用手机和智能设备之间的WiFi 感知订阅、发布能力,实现了数字管家应用和设备之间的发现。在完成设备间的认证和响应后,即可发送相关配网数据。同时还支持与常规Sof