开发中经常会遇到这样的问题: 自定义了一个弹出窗口,窗口上面的提示信息还有按钮的字都是固定的,换一个地方这些提示信息就不适用了.自己写了一个很简单的,每次实例化新的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>
然后就是正题了,注释写的应该算挺详细了,看代码吧<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的代码.
好了, 完成了,运行一下,看看效果如何: