网站建站专业,代码分享wordpress,nas 做网站,免费网站空间php目录
一#xff0c;Android提示消息
1.提示消息的形式 2.对话框
#xff08;1#xff09;默认对话框的创建步骤
#xff08;2#xff09; 自定义对话框的创建步骤
3.Toast
4.Notification
二#xff0c;菜单
1.选项菜单 OptionsMenu
2.上下文菜单 ContextMenu
…目录
一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中系统经常会向用户反馈一些提示信息其展现形式可以分为以下几种
对话框以弹出层强制用户作出响应Toast显示提示信息用户不用响应Notification在状态栏显示已通知信息除非用户查看信息或删除信息否则一直在状态栏显示。 2.对话框 对话框是以弹出层形式显示内容的视图控件一般在监听器中使用。对话框的应用也很广泛很多应用的新版本信息、退出时提示、列表项目附加信息等等都是使用对话框形式展现的。在Android中使用AlertDialog类来实现对话框的创建。
1默认对话框的创建步骤
创建AlertDialog.BuilderAlertDialog的创建器对象AlertDialog对象需要通过创建器来创建调用AlertDialog.Builder对象的方法为对话框设置属性图标标题内容按钮等调用AlertDialog.Builder对象的create方法创建对话框调用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 version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:orientationverticalTextViewandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:text测试消息/Buttonandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid: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使用基本流程
创建Toast设置基本属性上下文显示内容显示时长显示Toast
btn_notice.setOnClickListener(new View.OnClickListener() {Toast.makeText(this, 启动成功, Toast.LENGTH_SHORT).show();
});Toast可以通过Toast.setView()来自定义界面不过不常用。
4.Notification Notification在状态栏显示提示信息除非用户查看或关闭信息状态栏才取消显示。一般使用在收到短信后、收到应用的推送消息后、收到未接电话等场合。Notification需要借助NotificationManager通知管理器来实现。 实现Notification需要用到以下几个类
NotificationManager通知管理器调用notify方法可以向系统发送通知Notification.Builder通知创建器Notification对象通过创建器来创建Notification通知类保存通知相关信息大图标小图标标题通知信息等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, //渠道idchannelName, //渠道名称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中支持三种菜单类型
选项菜单在主窗口点击”Menu“弹出的菜单上下文菜单长按某个控件时弹出的菜单弹出式菜单点击某个控件时弹出的菜单 1.选项菜单 OptionsMenu 在主窗口点击”Menu“弹出的菜单一般包含若干个子菜单即用户点击”选项菜单“中的某一项时弹出的附加菜单。
选项菜单实现方法
1创建菜单布局文件
?xml version1.0 encodingutf-8?
menu xmlns:androidhttp://schemas.android.com/apk/res/androiditem android:title文件 android:idid/menu_filemenuitem android:title打开 android:idid/menu_open/itemitem android:title保存 android:idid/menu_save/item/menu/itemitem android:title操作 android:idid/menu_actionmenuitem android:title复制 android:idid/menu_copy/itemitem android:title粘贴 android:idid/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打开通知权限即可。