十、Android 自定义对话使用案例

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();
     } 

猜你喜欢

转载自blog.csdn.net/weixin_45802395/article/details/113699364