
public class BaseBean {/*** 标题*/ String title; /*** 内容*/ String content;/*** 获取标题** @return 标题*/ public String getTitle() { return title; }/*** 设置标题** @param title*标题*/ public void setTitle(String title) { this.title = title; }/*** 获取内容** @return 内容*/ public String getContent() { return content; }/*** 设置内容** @param content*内容*/ public void setContent(String content) { this.content = content; } } 以上是基类中的内容,那接下来就看看Dialog中是怎么定义的吧:public class DialogBean extends BaseBean {/*** 点击返回键是否可消失*/ boolean cancelable; /*** 点击蒙皮是否可以消失*/ boolean outCancelable; /*** 事件监听*/ DialogClickListener listener; /*** 按钮类型【默认显示两个按钮】*/ DialogButtonType buttonType = DialogButtonType.TwoButton;/*** 显示布局资源ID*/ Integer layoutResID;public DialogBean() { }/*** 点击BACK键是否可以消失** @return 【true:可消失】【false:不消失】*/ public boolean isCancelable() { return cancelable; }/*** 设置点击BACK键是否可以消失** @param cancelable*【true:可消失】【false:不消失】*/ public void setCancelable(boolean cancelable) { this.cancelable = cancelable; }/*** 点击蒙皮是否可以消失** @return 【true:可消失】【false:不消失】*/ public boolean isOutCancelable() { return outCancelable; }/*** 设置点击蒙皮是否可以消失** @param outCancelable*【true:可消失】【false:不消失】*/ public void setOutCancelable(boolean outCancelable) { this.outCancelable = outCancelable; }/*** 获取事件监听器** @return 事件监听器*/ public DialogClickListener getListener() { return listener; }/*** 设置事件监听器** @param listener*事件监听器*/ public void setListener(DialogClickListener listener) { this.listener = listener; }/*** 获取按钮类型** @return 按钮类型*/ public DialogButtonType getButtonType() { return buttonType; }/*** 设置按钮类型** @param buttonType*按钮类型*/ public void setButtonType(DialogButtonType buttonType) { this.buttonType = buttonType; }/*** 获取要显示的布局ID** @return 要显示的布局ID*/ public Integer getLayoutResID() { return layoutResID; }/*** 设置要显示的布局ID** @param layoutResID*要显示的布局ID*/ public void setLayoutResID(Integer layoutResID) { this.layoutResID = layoutResID; }/*** 按钮类型** @author llew*/ public enum DialogButtonType { /*** 一个按钮*/ OneButton, /*** 两个按钮*/ TwoButton, /*** 三个按钮*/ ThreeButton }/*** 按钮点击监听器** @author llew**/ public interface DialogClickListener { /*** 点击按钮** @param buttonIndex*按钮下标【从0开始】*/ public void onClick(int buttonIndex); } } DialogBean中的代码注释的都很详细了,就不再多解释了,主要就是封装了对话框中常见的属性。接下来就看看定义的所需要的Dialog的样式吧:<style name="theme_dialog_alert" parent="@android:style/Theme.Dialog"> <item name="android:windowNoTitle">true</item> <item name="android:windowBackground">@android:color/transparent</item> </style>样式主要定义了该对话框没有标题,背景颜色是透明的,现在所需的样式定义完了,主角GlobleDialog该出场了,代码如下:
public class GlobleDialog extends Dialog implements View.OnClickListener {private TextView titleTextView, contentTextView; private Button leftButton, centerButton ,rightButton; private DialogBean bean;public GlobleDialog(Context context, int theme, DialogBean bean) { super(context, theme); this.bean = bean; initWedgits(); }/*** 初始化各组件*/ private void initWedgits() { try { setCancelable(bean.isCancelable()); setCanceledOnTouchOutside(bean.isOutCancelable()); View dialogView = getLayoutInflater().inflate(bean.getLayoutResID(), null); titleTextView = (TextView) dialogView.findViewById(R.id.button_title); contentTextView = (TextView) dialogView.findViewById(R.id.button_content); titleTextView.setText(bean.getTitle()); contentTextView.setText(bean.getContent()); leftButton = (Button) dialogView.findViewById(R.id.button_left); centerButton = (Button) dialogView.findViewById(R.id.button_center); rightButton = (Button) dialogView.findViewById(R.id.button_right);leftButton.setOnClickListener(this); centerButton.setOnClickListener(this); rightButton.setOnClickListener(this);if(DialogButtonType.OneButton == bean.getButtonType()) { leftButton.setVisibility(View.GONE); rightButton.setVisibility(View.GONE); } else if(DialogButtonType.TwoButton == bean.getButtonType()) { centerButton.setVisibility(View.GONE); } setContentView(dialogView);Window dialogWindow = getWindow(); WindowManager.LayoutParams lp = dialogWindow.getAttributes(); dialogWindow.setGravity(Gravity.CENTER); DisplayMetrics dm = new DisplayMetrics(); dialogWindow.getWindowManager().getDefaultDisplay().getMetrics(dm); lp.width = dm.widthPixels - 20; dialogWindow.setAttributes(lp); } catch (Exception e) { e.printStackTrace(); } }@Override public void onClick(View v) { try { switch (v.getId()) { case R.id.button_left: bean.getListener().onClick(0); break; case R.id.button_center: bean.getListener().onClick(1); break; case R.id.button_right: bean.getListener().onClick(2); break; default: break; } } catch (Exception e) { e.printStackTrace(); } }} 自定义的GlobleDialog的代码写完了,那就看看是如何使用的吧:package com.llew.e.dialog.view.activity;import android.app.Activity; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; import android.widget.Toast;import com.llew.e.dialog.R; import com.llew.e.dialog.view.bean.DialogBean; import com.llew.e.dialog.view.bean.DialogBean.DialogButtonType; import com.llew.e.dialog.view.bean.DialogBean.DialogClickListener; import com.llew.e.dialog.view.wedgit.GlobleDialog;public class MainActivity extends Activity { /** Called when the activity is first created. */private Dialog dialog; private TextView textView;@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); textView = (TextView) findViewById(R.id.textview); textView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DialogBean dialogBean = new DialogBean(); dialogBean.setCancelable(true); dialogBean.setOutCancelable(true); dialogBean.setTitle("小练习"); dialogBean.setContent("在这里输入提示信息"); dialogBean.setButtonType(DialogButtonType.TwoButton); dialogBean.setLayoutResID(R.layout.dialog_common); dialogBean.setListener(new DialogClickListener() { @Override public void onClick(int buttonIndex) { switch (buttonIndex) { case 0: Toast.makeText(MainActivity.this, "点击了播放", Toast.LENGTH_SHORT).show(); break; case 1: Toast.makeText(MainActivity.this, "点击了暂停", Toast.LENGTH_SHORT).show(); break; case 2: Toast.makeText(MainActivity.this, "点击了停止", Toast.LENGTH_SHORT).show(); break; default: break; } } }); createDialog(dialogBean); } }); }public void createDialog(DialogBean bean) { if(null == dialog) { dialog = new GlobleDialog(MainActivity.this, R.style.theme_dialog_alert, bean); } dialog.show(); } } 代码实在是没有什么好解释的,我相信你一看就会,那看看运行效果吧:
界面看上去有点丑,大家可以自己修改颜色值或者使用图片代替。
好了,到这里自定义Dialog实现不同风格效果的对话框就讲解完了,谢谢大家的阅读。
源码下载:Android UI设计实现各种风格的对话框效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。