android 消息提示机制

消息提示机制

一 对话框 Dialog AlertDialog

对话框有:标准对话框, 菜单式对话框, 菜单式复选框对话框,自定义对话框

(注意:这里的上下文公用了,代码的点击方法我已经在点击监听事件里注册了)
1 标准对话框:
在布局界面写好按钮,然后设置点击事件,
在事件种创建 dialog 的构造器 AlertDialog.Builder builder = new AlertDialog.Builder(context);
然后用构造器设置dialog的各种属性,最后create,show 出来。代码如下:

public void showDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setIcon(R.drawable.g_18)
.setTitle(R.string.dialog_title)
.setMessage(R.string.isdelete)
.setCancelable(false)
.setPositiveButton(R.string.button_ok,
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog,
int which) {
Toast.makeText(context, which + "",Toast.LENGTH_SHORT);

}
}) // 设置是否可以中断对话框 ,即点击Activity的其他界面,而不显示对话框
.setNegativeButton(R.string.button_cancel,
new DialogInterface.OnClickListener() { // 取消按钮

@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss(); // 退出对话框

}
})

.create().show();

}
2 菜单式对话框 

public void menuDialog() {
final String[] roleArray = getResources().getStringArray(R.array.array_role); // 获取数组数据
AlertDialog.Builder builder = new Builder(context);
builder.setIcon(R.drawable.png_0019) // 设置图标

.setTitle("QQ华夏角色")
.setItems(R.array.array_role,
new DialogInterface.OnClickListener() { // 设置listview 项数据,并且添加点击事件监听

@Override
public void onClick(DialogInterface dialog,int which) {
ToastUtils.show(context, roleArray[which]); //
// 显示获取的值

}
})
.create()
.show();

}

  

  

3 菜单式复选框对话框
在这里用到了 稀疏布尔数组 这个数组或拿到你点击过的选项,有key,value;
key:保存的是那你点击过的条目的位置position,(注意:这个位置不是数组的索引位置)。
value:保存的是一个boolean 值 true 表示你选中了这个checkBox,false 则没有。

public void menuCheckboxDialog() {
String[] loveCityArray = getResources().getStringArray(
R.array.array_loveCity);
AlertDialog.Builder builder = new Builder(context);
builder.setIcon(R.drawable.png_city)
.setTitle("你到过哪些城市?")
.setMultiChoiceItems(R.array.array_loveCity, null,
new DialogInterface.OnMultiChoiceClickListener() {

@Override
public void onClick(DialogInterface dialog,
int which, boolean isChecked) {
/*
* AlertDialog alertdialog= (AlertDialog)
* dialog; //向下转型 String str=
* alertdialog.getListView
* ().getAdapter().getItem(which).toString();
* //获取ListView每一个项种的数据(object)
* ToastUtils.show(context, str);
*/

}
})
// 确定按钮,获取用户选择的项目
.setPositiveButton(R.string.button_ok,new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
AlertDialog alertDialog =(AlertDialog)dialog;
ListView listView= alertDialog.getListView();
//获取listview ,获取稀疏布尔数组 这个数组 key value
SparseBooleanArray sparseBoleanArray=alertDialog.getListView().getCheckedItemPositions();
int size= sparseBoleanArray.size();
StringBuilder sb=new StringBuilder();
for(int i=0;i<size;i++)
{
if(sparseBoleanArray.valueAt(i)){
int position=sparseBoleanArray.keyAt(i);
String selectStr = listView.getAdapter().getItem(position).toString();
sb.append(selectStr);
}
}
ToastUtils.show(context, sb.toString());

}
})
// 取消按钮
.setNegativeButton(R.string.button_cancel,
new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog,
int which) {
dialog.dismiss(); // 退出对话框

}
})

.create().show();

}

  

4 自定义对话框

这里我没有用系统的主题,而是自己写了一个样式(样式和主题这里不讨论)。
默认会有系统提供的背景的,我写了一个自定义样式继承系统提供的样式,重写了系统的背景属性
<style name="MyDiy_dialog" parent="@android:style/Theme.Dialog">
<item name="android:windowBackground">@android:color/transparent</item>
</style>
实现思路:
创建一个布局xml,这个布局xml就是显示我对话框的布局。
创建dialog 对象,加载窗口布局xml。
通过父控件dialog 找到子控件 文本编辑框
设置监听事件

public void diyDialog() {
final Dialog dialog=new Dialog(context,R.style.MyDiy_dialog); //创建窗口对象

dialog.setContentView(R.layout.diydialog); //将自定义对话框窗体加载到对话框
final EditText et=(EditText) dialog.findViewById(R.id.txt_et); //通过付控件 找到子控件 文本编辑框
Button btn_ok=(Button) dialog.findViewById(R.id.ok_btn); //找到 确定按钮
Button btn_cancel=(Button) dialog.findViewById(R.id.cancle_btn); //找到 取消按钮
btn_ok.setOnClickListener(new OnClickListener() { //设置 确定按钮的 点击监听事件

@Override
public void onClick(View v) {
String strEidtText=et.getText().toString().trim(); // 获取EditText控件的文本值
dialog.dismiss();
//.... 其它逻辑

ToastUtils.show(context, strEidtText); //土司帮助类 显示文本值

}
});
btn_cancel.setOnClickListener(new OnClickListener() { //设置取消按钮的监听事件

@Override
public void onClick(View v) {
dialog.dismiss();

}
});

dialog.show();

}

二 Logcat:日志猫

1 级别 :v、d、i、w、e 级别由低往高
- verbose :混淆的 ,所有信息都可以输出,级别最低
- debug :调试级别
- info:信息级别
- warning:警告级别
- error :错误级别
2 添加过滤器 按照Tag进行过滤

3 System.out.println()与Log输出之间的区别
- System.out.println()输出的信息 等级是info级别,标记tag:System.out
- System.out.print() 输出信息 需要System.out.flush()刷缓存输出

三 Toast: 吐司
Toast通知是一种浮现在屏幕上层的消息提醒,它只填充消息所需要的空间,而当前正在运行的活动仍然保持其自身的可见性和交互性。
这种通知自动淡入淡出且不接受交互事件 。
1 xml定义Toast
在xml 中定义好布局 ,然后写java代码

public void diyToast2(View v) {
// 定义Toast对象
Toast toast = new Toast(context);
// 布局填充器
/**
* 把布局xml文件进行实例化为对象,把布局的内容填充到View对象中
* resource: 布局资源 root:父控件或者根节点
* inflate:打氣筒的形式把布局资源填充到View对象中,View对象具有层次性
*/
View view = LayoutInflater.from(context).inflate(R.layout.diy, null);
toast.setView(view);
// 设置持续时间
toast.setDuration(Toast.LENGTH_LONG);
// Gravity :显示的位置 ,xOffset:偏移量 yOffset:偏移量
toast.setGravity(Gravity.LEFT, 0, 0);
toast.show();
}

2 通过代码的形式自定义Toast

public void diyToast1(View v) {
// 声明一个Toast对象
Toast toast = new Toast(context);
// 构建布局对象
LinearLayout layout = new LinearLayout(context);
ViewGroup.LayoutParams params = new LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
// 设置布局参数
layout.setLayoutParams(params);
// 设置线性布局的方向
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.setBackgroundColor(Color.CYAN);
// 创建图像对象
ImageView image = new ImageView(context);
image.setImageResource(R.drawable.emoji_044);
// 向布局对象中添加图片视图控件
layout.addView(image);
// 构建文本视图控件
TextView message = new TextView(context);
message.setText("巴西世界杯!");
message.setTextColor(Color.BLUE);
layout.addView(message);
// 在toast对象中设置View
toast.setView(layout);
// 设置持续时间
toast.setDuration(Toast.LENGTH_LONG);
// Gravity :显示的位置 ,xOffset:x方向偏移量 yOffset:y方向偏移量
toast.setGravity(Gravity.LEFT, 0, 0);
toast.show();}

时间: 2024-08-27 00:54:10

android 消息提示机制的相关文章

Android消息提示:AlertDialog、Toast、Notification的使用

主要介绍Android常用于消息提示的组件:ALertDialog.Toast.Notification的使用场景以及它们的基本用法,探讨一些高级主题,最后总结一些开发过程中常见的问题. 首先我们来对这三种消息提示机制来一个直观的认识,分别是AlertDialog Toast.Notification 接下来分别介绍这三种机制各自对应的使用场景和用法 AlertDialog 使用场景:AlertDialog在应用内的使用还是很常见的,常用于让用户做出某种选择,而这种选择一定是简单的交互,如果是复

Android消息循环机制

转载请注明出处:http://blog.csdn.net/crazy1235/article/details/51707527 Android的消息循环机制主要先关的类有: Handler Looper Message MessageQueue ActivityThread 实际上 应用程序启动的时候,会创建一个UI线程,然后该线程关联一个消息队列,相关操作封装一个个消息放入队列中,主线程会不断循环从队列中取出消息进行分发处理. 为什么用Handler 大家都知道,Android规定[访问UI只

Android消息提示框Toast

Toast是Android中一种简易的消息提示框.和Dialog不一样的是,Toast是没有焦点的,toast提示框不能被用户点击,而且Toast显示的时间有限,toast会根据用户设置的显示时间后自动消失. 创建Toast的方法总共有2种: 1.Toast.makeText(Context context, (CharSequence text)/( int resId), int duration) 参数:context是指上下文对象,通常是当前的Activity,text是指自己写的消息内

android 消息提示

      重写的TextView package com.glory.room.view; import android.content.Context; import android.content.res.Resources; import android.graphics.Color; import android.graphics.Typeface; import android.graphics.drawable.ShapeDrawable; import android.graph

网易视频云技术分享:Android 消息机制学习

Android消息机制大家都不陌生,想必大家也都看过Handler.Looper的源码(看过可以直接看末尾重点,一款监控APP卡顿情况的控件),下面,网易视频云技术专家就整合一下这方面的资料,加深对这方面的印象. 用法 private Handler mHandler = new Handler() {    @Override public void handleMessage(Message msg) {        switch (msg.what) {            case

Android HandlerThread 消息循环机制之源代码解析

关于 HandlerThread 这个类.可能有些人眼睛一瞟,手指放在键盘上,然后就是一阵狂敲.立即就能敲出一段段华丽的代码: HandlerThread handlerThread = new HandlerThread("handlerThread"); handlerThread.start(); Handler handler = new Handler(handlerThread.getLooper()){ public void handleMessage(Message

Android消息机制Handler、Looper、MessageQueue源码分析

1. Handler Looper MessageQueue的关系 2.源码分析 下图表示了Handler.Looper.MessageQueue.Message这四个类之间的关系. Handler必须与一个Looper关联,相关Looper决定了该Handler会向哪个MessageQueue发送Message 每一个Looper中都包含一个MessageQueue Handler中的mQueue引用的就是与之关联的Looper的MessageQueue 不管Handler在哪个线程发送Mes

Android消息推送机制

1.推送方式基础知识: 当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数据,比如<地震应急通>就需要及时获取服务器上最新的地震信息.要获取服务器 上不定时更新的信息一般来说有两种方法,第一种是客户端使用Pull(拉)的方式,隔一段时间就去服务器上获取信息,看是否有更新的信息出现.第二种就是 服务器使用Push(推送)的方式,当服务器端有新信息了,则把最新的信息Push到客户端上.? 虽然Pull和Push两种方式都能实现获取服务器端更新信息的功能,但是明显来说Push is

【转】Android 消息机制

Android 消息机制 本文首先从整体架构分析了Android整个线程间消息传递机制,然后从源码角度介绍了各个组件的作用和完成的任务.文中并未对基础概念进行介绍,关于threadLacal和垃圾回收等等机制请自行研究. 基础架构 首先,我们需要从整体架构上了解一下Android线程通信都做了哪些工作.我们都知道,进程是操作系统分配资源的最小单位,一个进程中可以启动多个线程来执行任务,这些线程可以共享进程的资源但不分配资源,这里讲的资源主要是只内存资源.Android的线程间消息传递机制其实和我