成都网站建设设计

将想法与焦点和您一起共享

Android自定义Dialog及与Activity的交互

一个小项目,需要用到一个自定义的Dialog,Dialog中需要一个ImageView用于显示表情图片,一个TextView用来显示提示文本,点击任何地方关闭Dialog,同时关闭打开这个Dialog的Activity。
效果如下图:
Android自定义Dialog及与Activity的交互
实现过程如下:
一、定义一个布局文件(dialog_custom.xml)
代码如下:
———————————————————————————————

成都创新互联公司专业为企业提供水磨沟网站建设、水磨沟做网站、水磨沟网站设计、水磨沟网站制作等企业网站建设、网页设计与制作、水磨沟企业网站模板建站服务,10年水磨沟做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。


 

                 
            

———————————————————————————————

内容很简单,就一个LinearLayout布局,里面有一个ImageView,一个TextView。
LinearLayout为了实现圆角矩形的效果,用了个shape背景。代码如下(shape_conner_white_bg.xml):
———————————————————————————————


     
           
        
     

———————————————————————————————
二、自定义DialogUtils类,代码如下:
———————————————————————————————


import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class DialogUtils 
{    
    private static TextView tipTextView;    
    private static Dialog MyDialog;
    private static ImageView image_Icon;
    private static LinearLayout layout_dialog;
    //Dialog有三个参数,Contex不用多说,msg是提示文本,icon_draw是需要显示的图标。
public static void showCompleteDialog(final Context context,String msg,Drawable  icon_draw)
    {        
        LayoutInflater inflater = LayoutInflater.from(context);        
        View v = inflater.inflate(R.layout.dialog_custom, null);// 得到加载view
        tipTextView = (TextView) v.findViewById(R.id.tv_toast_content);// 提示文字 
        image_Icon=(ImageView)v.findViewById(R.id.im_toast_icon);//提示图标
        tipTextView.setText(msg);// 设置加载信息  
        image_Icon.setImageDrawable(icon_draw);
        layout_dialog=(LinearLayout) v.findViewById(R.id.layout_dialog);
        layout_dialog.setOnClickListener(new OnClickListener() 
        {

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

            }
        });

        MyDialog = new Dialog(context, R.style.MyDialogStyle);// 创建自定义样式dialog
        MyDialog.setCancelable(true); // 按“返回键”可以关闭Dialog       
        MyDialog.setCanceledOnTouchOutside(true); // 点击加载框以外的区域可以关闭Dialog  
        //定义MyDialog关闭时同时关闭Activity
        MyDialog.setOnDismissListener(new OnDismissListener() 
        {

            @Override
            public void onDismiss(DialogInterface dialog) 
            {
                //MyDialog.getOwnerActivity().finish();
                Activity act=(Activity)context;
                act.finish();
                MyDialog.dismiss();

            }
        });

        MyDialog.setContentView(v, new LinearLayout.LayoutParams(                
                LinearLayout.LayoutParams.MATCH_PARENT,                
                LinearLayout.LayoutParams.MATCH_PARENT));// 设置布局        
        /**         *将显示Dialog的方法封装在这里面         */        
        Window window = MyDialog.getWindow();        
        WindowManager.LayoutParams lp = window.getAttributes();        
        lp.width = 900;        
        lp.height = 360;        
        lp.y=-150;        
        window.setGravity(Gravity.CENTER_HORIZONTAL);        
        window.setAttributes(lp);        
        MyDialog.show();    
        }
    }   

其中MyDialogStyle是在res/values/style中定义的: