10.1对话框重点总结
1)AlertDialog
- 普通提示对话框 setMessage
- 单选对话框 setSingleChoiceltems
- 多选对话框 setMultiChoiceltems
- 自定义View对话框setView
2)自定义Dialog类
- 布局dialog.xml
- 样式styles.xml
- 继承Dialog、构造方法、onCreate
- 值的传入和传出
适当掌握:
进度条对话框 ProgrssDialog
拖动条对话框 SeekBarDialog
日期选择对话框 DatePickerDialog
时间选择对话框 TimerPickerDialog
10.2Toast
Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失
1.创建:
//一个上下文对象Context,一个显示的消息来源,一个设置持续时间。
static Toast makeText(Context context,int resId,int duration).
static Toast makeText(Context context,CharSequence text,int duration)
10.2.1 Toast应用方式
- 默认
- 自定义位置
- 带图片
- 自定义样式
public void showToast(View v){
//创建
Toast toast=Toast.makeText(this,"默认提示",Toast.LENGTH_LONG);
//设置图片:页面获取到
LinearLayout layout =(LinearLayout) toast.getView();
ImageView imageView=new
ImageView(MainActivity.this);
imageView.setImageResource(R.drawable.logo);
layout.addView(imageView,0);
//设置显示位置
toast.setGravity(Gravity.CENTER_VERTICAL,0,0);
//显示
toast.show();
}
10.3 Android res文件下的资源文件
Android res:文件夹下资源都会自动创建一个R 类常量id,资源名称就是生成常量id;
1.使用资源文件为了更好维护app升级开发等;节省代码维护量。
2.资源文件类型:文字、图片、音频视频、常量值、数组、布局文件等;(css /图片)
3. res文件下面建立资源文件;
4.1xml文件里如何使用:
@XXX/资源ID:XXX代表资源类型
@color 颜色
@String
@array
@drawable
4.2java代码里如何使用
Resources res= getResources();
res.getColor(R.color.orchid); res.getString(R.string.app_name); res.getLayout(R.layout.activity_main); res.getDrawable(R.drawable.grid); res.getStringArray(R.array.arrtest);
10.4案例:
自定义的对话框显示页面,必须加载到Dialog 内容视图上,setContentView()
代码如下:
package com.imau.customdialogdemo;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
public class CustomDialog extends Dialog {
public CustomDialog(@NonNull Context context) {
super(context);
}
//当创建对话框自动调用;初始化自定义属性;设置
@Override
public void create() {
super.create();
//this.setCancelable();
//this.setCanceledOnTouchOutside(); }
//定义内部类Builder;
public static class Builder {
//自定义布局文件的组件
private Button yesButton;
private Button noButton;
private ImageView icon;
private TextView tvTitle;
private TextView tvMessage;
//基本属性
private Context context;
private String title;
private String message;
private int iconId;//R.dri.
//定义事件监听器
private CustomDialog.OnClickListener yesListener;
private CustomDialog.OnClickListener noListener;
//按钮标题
private String yesText;
private String noText;
public Builder(@NonNull Context context) {
this.context=context;
}
public Builder setTitle(String title) {
this.title=title;
return this;
}
public Builder setMessage(String message) {
this.message = message;
return this;
}
public Builder setIcon(@DrawableRes int iconId) {
this.iconId = iconId;
return this;
}
public Builder setPositiveButton(String text, final CustomDialog.OnClickListener listener) {
this.yesText =text;
this.yesListener = listener;
return this; }public Builder setNegativeButton(String text, final CustomDialog.OnClickListener listener) {
this.noText = text;
this.noListener = listener;
return this;
}
private void initView(View view,final Dialog dialog){
//设置组件
this.icon=view.findViewById(R.id.icon);
this.tvMessage=view.findViewById(R.id.message);
this.tvTitle=view.findViewById(R.id.title);
this.yesButton=view.findViewById(R.id.yes);
this.noButton=view.findViewById(R.id.no);
if(this.iconId!=0){
icon.setImageResource(this.iconId);
}
if(tvMessage!=null){
this.tvMessage.setText(this.message);
}
if(tvTitle!=null){
this.tvTitle.setText(this.title);
}
//没有设置取消按钮,不显示
if(noText==null){
noButton.setVisibility(View.GONE);
}
if(yesText==null){
yesButton.setVisibility(View.GONE);
}
//设置取消按钮文本
if(noText!=null){
noButton.setText(this.noText);
}
//设置确定按钮文本
if(yesText!=null){
yesButton.setText(this.yesText); }
//设置按钮事件处理
if(yesListener!=null){
yesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
yesListener.onClick(dialog);
} }); }
if(noListener!=null){
noButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
noListener.onClick(dialog); }}); } }
public CustomDialog create() {
final CustomDialog dialog = new CustomDialog(this.context);
//自定义布局文件:布局文件加载器
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
//布局文件 View
view=inflater.inflate(R.layout.my_dialog,null);
//将自定义的对话框布局页面加载到内容视图上。
dialog.addContentView(view, new
LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT));
initView(view,dialog);
return dialog;
} }
//定义内部接口:按钮事件的处理用的
interface OnClickListener{
void onClick(Dialog dialog);
} }
private void close(Dialog dialog){
dialog.cancel();
}
//自定义对话框
public void showDialog(View view){
/**
* 1.普通对话框:标题,消息,图标;按钮事件
* 2.样式布局应该自定义
* 3.主题
*/ CustomDialog.Builder builder=new CustomDialog.Builder(MainActivity.this);
builder.setTitle("测试自定义对话框");
builder.setIcon(R.drawable.a);
builder.setMessage("自定义对话框小!!!!!");
builder.setPositiveButton("确定", new
CustomDialog.OnClickListener() {
@Override
public void onClick(Dialog dialog) {
System.out.println("点击了确定按钮");
close(dialog); } });
builder.setNegativeButton("取消",null);
final CustomDialog dialog=builder.create();
dialog.show();
}