消息提示机制
一 对话框 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();}