一个可以重复使用的消息提示确认框,不用每次创建对话框,获取对话框的确定以及取消按钮,减少代码量,还能体现很好的封装性。
java代码,创建自定义对话框基础类:
package com.xjw.translate; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.TextView; /** * 项目名称:translate * 实现功能: * 类名称:ConfirmDialog * 类描述:(该类的主要功能) * 创建人:徐纪伟 * E-mail: xujiwei558@126.com * 创建时间:2014年10月19日 下午7:28:39 * 修改人: * 修改时间: * 修改备注: * @version */ public class ConfirmDialog extends Dialog implements android.view.View.OnClickListener{ private Button btnOk,btnCancel; private TextView tvTitle,tvMessgae; private String title, message; private OnOkButtonClickListener listener; public ConfirmDialog(Context context) { super(context); // TODO Auto-generated constructor stub } public ConfirmDialog(Context context, String title, String message, OnOkButtonClickListener listener) { //设置对提示框的样式,比如去除边框背景,添加自定义图片等 super(context,R.style.ConfirmDialog); this.title = title; this.message = message; this.listener = listener; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //设置提示框的样式布局 setContentView(R.layout.confirm_dialog); btnOk = (Button)findViewById(R.id.btn_ok); btnCancel = (Button)findViewById(R.id.btn_cancel); btnOk.setOnClickListener(this); btnCancel.setOnClickListener(this); tvTitle = (TextView)findViewById(R.id.tv_confirm_title); tvMessgae = (TextView)findViewById(R.id.tv_confirm_messgae); tvTitle.setText(title); tvMessgae.setText(message); } /** * 定义确定按钮和取消按钮的事件 */ @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_ok: //点击确定按钮时,触发点击回调事件 listener.OnOkButtonClick(); break; case R.id.btn_cancel: dismiss(); break; default: break; } } /** * @类名称: OnOkButtonClickListener * @描述: 使用接口回调的方式监听确定按钮点击事件 * @throws * @author 徐纪伟 * 2014年10月24日下午10:12:29 */ public interface OnOkButtonClickListener{ public void OnOkButtonClick(); } public Button getBtnOk() { return btnOk; } public void setBtnOk(Button btnOk) { this.btnOk = btnOk; } public Button getBtnCancel() { return btnCancel; } public void setBtnCancel(Button btnCancel) { this.btnCancel = btnCancel; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public OnOkButtonClickListener getListener() { return listener; } public void setListener(OnOkButtonClickListener listener) { this.listener = listener; } }
提示框布局文件confirm_dialog.xml,里面包含标题,显示内容,以及两个按钮:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/exit_layout" android:layout_width="280dp" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="vertical"> <TextView android:id="@+id/tv_confirm_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="4dp" android:padding="5dp" android:textColor="#333" android:textSize="20sp" android:text="提示信息" /> <TextView android:id="@+id/tv_confirm_messgae" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#333" android:layout_marginTop="1dp" android:padding="10dp" android:textSize="16sp" android:gravity="center_horizontal" android:text="提示信息" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="58dp" android:layout_marginBottom="8dp" > <Button android:id="@+id/btn_ok" android:layout_width="110dp" android:layout_height="wrap_content" android:text="是" android:textSize="16sp" android:textColor="#fff" android:background="@drawable/btn_selector" android:gravity="center" android:onClick="exitbutton0" /> <Button android:id="@+id/btn_cancel" android:layout_width="110dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="否" android:textSize="16sp" android:textColor="#333" android:background="@drawable/selector_btn_cancel" android:gravity="center" android:onClick="exitbutton1" /> </LinearLayout> </LinearLayout>
下面是提示框的样式:
<style name="ConfirmDialog" parent="@android:Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@drawable/confirm_dialog_bg2</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> </style>
使用方法:
ConfirmDialog confirmDialog = new ConfirmDialog(context, resource.getString(R.string.confirm_title_normal), resource.getString(R.string.clear_history), new ConfirmDialog.OnOkButtonClickListener() { @Override public void OnOkButtonClick() { //此处可以填写确定按钮的事件响应 } }); confirmDialog.show();
效果预览: