您当前的位置: 首页 >  android

Kevin-Dev

暂无认证

  • 2浏览

    0关注

    544博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【Android -- Window】Dialog 的基本使用

Kevin-Dev 发布时间:2016-12-09 16:13:20 ,浏览量:2

本文介绍最常用的四种对话框的使用方法,包括普通(包含提示消息和按钮)对话框、列表展示对话框、加载对话框、编辑对话框等多种形式。

一、前期准备

1. 设置对话框背景 dialog_bg_normal.xml



    
    
    

2. 设置风格

	
        
        @drawable/dialog_bg_normal
        @android:style/Animation.Dialog
        @null
        true
        true
        true
        true
    

3. 自定义对话框

/**
 * Created on 2021/11/13 11:45
 *
 * @author Gong Youqiang
 */
public class CommonDialog extends Dialog {
    private Window mWindow;

    public CommonDialog(@NonNull Context context) {
        super(context);
    }

    public CommonDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
    }

    protected CommonDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
    }

    public void setView(View view) {
        setContentView(view);
    }

    public void setView(int ID) {
        setContentView(ID);
    }

    public void setProperty(int x,int y,int w,int h) {
        mWindow = getWindow();
        WindowManager.LayoutParams params = mWindow.getAttributes();
        params.x = x;  //设置对话框的位置,0为中间
        params.y = y;
        params.width = w;
        params.height = h;
        params.alpha = 1.0f; //设置对话框的透明度,1f不透明
        params.gravity = Gravity.CENTER; //设置显示在中间
        mWindow.setAttributes(params);
    }
}
二、普通(包含提示消息和按钮)对话框

1. 效果图 normal.png

2. 布局文件 dialog_device_add_notice.xml




    

        

        

        

            

            
        
    

    
        

        
    

3. 逻辑代码

  private CommonDialog mDialog;
  public void click(View view) {
        showDialog();
    }

    private void showDialog() {
        mDialog = new CommonDialog(this,R.style.customDialog);
        View view = View.inflate(this, R.layout.dialog_device_add_notice,null);
        final LinearLayout llBefore = (LinearLayout)view.findViewById(R.id.ll_before);
        final LinearLayout llAfter = (LinearLayout)view.findViewById(R.id.ll_after);
        final ImageView imgWaiting = (ImageView) view.findViewById(R.id.img_config_icon1);
        TextView txtTitle = (TextView) view.findViewById(R.id.txt_title);
        txtTitle.setText(getString(R.string.base_update_notice));
        final TextView txtMsg = (TextView) view.findViewById(R.id.txt_msg);
        TextView txtCancle = (TextView) view.findViewById(R.id.txt_cancle);
        txtMsg.setText(getString(R.string.base_need_update));
        txtMsg.setGravity(Gravity.CENTER);
        txtCancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });
        TextView txtOk = (TextView) view.findViewById(R.id.txt_ok);
        llBefore.setVisibility(View.VISIBLE);
        llAfter.setVisibility(View.GONE);
        txtOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //versionDialog.dismiss();
                //updateVersion();
                txtMsg.setText("正在搜索,请稍后...");
                llBefore.setVisibility(View.GONE);
                llAfter.setVisibility(View.VISIBLE);

                AnimationDrawable animationDrawable = (AnimationDrawable) imgWaiting.getDrawable();
                if(animationDrawable != null){
                    animationDrawable.start();
                }
            }
        });
        mDialog.setView(view);
        mDialog.setProperty(0,0,800,600);
        mDialog.setCanceledOnTouchOutside(true);
        mDialog.show();
    }
三、列表对话框

list.png 1. 布局文件 dialog_delete_edit.xml




    

    

    

    

    

2. 逻辑代码

public void show2(View view) {
        show();
    }

    private void show(){
        mSelectDialog = new CommonDialog(this,R.style.customDialog);
        View view = View.inflate(this,R.layout.dialog_delete_edit,null);
        TextView txtUse = (TextView) view.findViewById(R.id.txt_use);
        TextView txtEdit = (TextView) view.findViewById(R.id.txt_edit);
        TextView txtDelete = (TextView) view.findViewById(R.id.txt_delete);
        txtUse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSelectDialog.dismiss();

            }
        });
        txtEdit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSelectDialog.dismiss();

            }
        });
        txtDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSelectDialog.dismiss();

            }
        });

        mSelectDialog.setView(view);
        mSelectDialog.setProperty(0,0,800,420);
        mSelectDialog.setCanceledOnTouchOutside(true);
        mSelectDialog.show();
    }

四、加载对话框

waite.png 1. 布局文件dialog_device_add_notice.xml




    

        

        

        

            

            
        
    

    
        

        
    

2. 逻辑代码

  private CommonDialog mDialog;
  public void click(View view) {
        showDialog();
    }

    private void showDialog() {
        mDialog = new CommonDialog(this,R.style.customDialog);
        View view = View.inflate(this, R.layout.dialog_device_add_notice,null);
        final LinearLayout llBefore = (LinearLayout)view.findViewById(R.id.ll_before);
        final LinearLayout llAfter = (LinearLayout)view.findViewById(R.id.ll_after);
        final ImageView imgWaiting = (ImageView) view.findViewById(R.id.img_config_icon1);
        TextView txtTitle = (TextView) view.findViewById(R.id.txt_title);
        txtTitle.setText(getString(R.string.base_update_notice));
        final TextView txtMsg = (TextView) view.findViewById(R.id.txt_msg);
        TextView txtCancle = (TextView) view.findViewById(R.id.txt_cancle);
        txtMsg.setText(getString(R.string.base_need_update));
        txtMsg.setGravity(Gravity.CENTER);
        txtCancle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });
        TextView txtOk = (TextView) view.findViewById(R.id.txt_ok);
        llBefore.setVisibility(View.VISIBLE);
        llAfter.setVisibility(View.GONE);
        txtOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //versionDialog.dismiss();
                //updateVersion();
                txtMsg.setText("正在搜索,请稍后...");
                llBefore.setVisibility(View.GONE);
                llAfter.setVisibility(View.VISIBLE);

                AnimationDrawable animationDrawable = (AnimationDrawable) imgWaiting.getDrawable();
                if(animationDrawable != null){
                    animationDrawable.start();
                }
            }
        });
        mDialog.setView(view);
        mDialog.setProperty(0,0,800,600);
        mDialog.setCanceledOnTouchOutside(true);
        mDialog.show();
    }
五、编辑对话框

input.png 1. 布局文件 dialog_mon_name.xml



    
    
        
        
            
            
        
    

    
        
        
    

2. 逻辑代码

    private CommonDialog mEditDialog;
    public void show(View view) {
        updateDoorDialog();
    }

    private void updateDoorDialog() {
        mEditDialog = new CommonDialog(this,R.style.customDialog);
        View view = View.inflate(this, R.layout.dialog_mon_name, null);
        final ContainsEmojiEditText dgName = (ContainsEmojiEditText) view.findViewById(R.id.ed_name);

        view.findViewById(R.id.txt_ok).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String newName = dgName.getText().toString().trim();
                if (TextUtils.isEmpty(newName)) {
//                    ToastUtil.showToast("名称不能为空!");
                    return;
                }

                if (mEditDialog != null) mEditDialog.dismiss();

            }
        });
        view.findViewById(R.id.txt_cancle).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mEditDialog != null) mEditDialog.dismiss();
            }
        });
        mEditDialog.setView(view);
        mEditDialog.setProperty(0,0,800,600);
        mEditDialog.setCanceledOnTouchOutside(true);
        mEditDialog.show();
    }

源码:传送门

关注
打赏
1658837700
查看更多评论
立即登录/注册

微信扫码登录

0.0409s