自定义Dialog,多处方便的使用

     开发中经常会遇到这样的问题: 自定义了一个弹出窗口,窗口上面的提示信息还有按钮的字都是固定的,换一个地方这些提示信息就不适用了.自己写了一个很简单的,每次实例化新的dialog时,只需要将文字传过去就好了.

     与大家分享一下,能力有限,有问题的地方还望朋友们帮忙指正,谢谢.

     

      首先自定义样式,两句话,相信不用多说了吧.

<!-- 正在加载对话框主题 -->
<style name="DialogTheme" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowNoTitle">true</item>
</style>

        接下来我写了一个dialog的小背景.

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <corners android:radius="10dp" />
    <solid android:color="#55000000" />
</shape>

       然后就是正题了,注释写的应该算挺详细了,看代码吧

/**
 * 自定义dialog
 */
public class CustomDialog extends Dialog implements View.OnClickListener {

    private static int default_width = 500;//宽度
    private static int default_height = 400;//高度
    private Button dialogOneBtn, dialogTwoBtn;
    private TextView titleMessage;
    private String title, oneBtnTitle, twoBtnTitle;
    private Context context;

    /**
     * 初始化dialog传过来的参数
     * @tilte 本dialog的提示文字
     * @oneBtnTitle dialog第一个按钮上的文字
     * @twoBtnTitle dialog第二个按钮上的文字
     * **/
    public CustomDialog(Context context,String title, String oneBtnTitle, String twoBtnTitle) {
        super(context, R.style.DialogTheme);
        this.context = context;
        this.title = title;
        this.oneBtnTitle = oneBtnTitle;
        this.twoBtnTitle = twoBtnTitle;
        init();

    }

    private void init(){
        setContentView(R.layout.dialog_layout);
        titleMessage = (TextView)findViewById(R.id.titleMessage);
        dialogOneBtn = (Button)findViewById(R.id.dialogOneBtn);
        dialogTwoBtn = (Button)findViewById(R.id.dialogTwoBtn);
        dialogOneBtn.getBackground().setAlpha(100);//设置按钮的透明度
        dialogTwoBtn.getBackground().setAlpha(100);
        titleMessage.setText(title);
        dialogOneBtn.setText(oneBtnTitle);
        dialogTwoBtn.setText(twoBtnTitle);

        dialogOneBtn.setOnClickListener(this);
        dialogTwoBtn.setOnClickListener(this);

        //设置窗口属性
        Window window = getWindow();
        WindowManager.LayoutParams params = window.getAttributes();
        float density = getDensity(context);
        params.width = default_width;
        params.height = default_height;
        window.setAttributes(params);
        //设置点击dialog外部不能关闭dialog
        this.setCanceledOnTouchOutside(false);
    }
    /**
     * 获取显示密度
     * **/
    public float getDensity(Context context) {
        Resources resources = context.getResources();
        DisplayMetrics dm = resources.getDisplayMetrics();
        return dm.density;
    }


    private CustomDialogListener customDialogListener;

    public void setCustomDialogListener(CustomDialogListener customDialogListener){
        this.customDialogListener = customDialogListener;
    }
    /**
     * 自定义接口回调dialog按钮的点击事件
     * **/
    public interface CustomDialogListener{
        void onClick(View view);
    }

    /**
     * dialog的按钮点击事件
     * **/
    @Override
    public void onClick(View v) {
        customDialogListener.onClick(v);
    }

     接下来是调用的activity的代码.



     好了, 完成了,运行一下,看看效果如何:




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值