Android自定义Dialog
来源:互联网 发布:网络征文比赛2017 编辑:程序博客网 时间:2024/06/16 09:08
最近需求是要实现自定义Dialog,然后研究了一下,写出下面的效果
实现步骤如下:
①先写一个基类CustomDialog ,基础原生Dialog
public class CustomDialog extends Dialog { private View convertView; /** * 构造函数, * @param context 上下文 * @param layoutId 传递自定义Dialog的XML资源文件ID */ public CustomDialog(Context context, int layoutId) { super(context); //填充XML convertView = LayoutInflater.from(context).inflate(layoutId, null); //设置没有标题栏 this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.setContentView(convertView); //设置窗口背景透明 getWindow().setBackgroundDrawableResource(android.R.color.transparent); } public <T extends View> T getView(int viewId){ return (T) convertView.findViewById(viewId); } public String getText(int viewId){ return ((TextView) getView(viewId)).getText().toString(); } public CustomDialog setText(int viewId, String text){ ((TextView) getView(viewId)).setText(text); return this; } public CustomDialog setViewOnClickListener(int viewId, View.OnClickListener listener){ View view = getView(viewId); if (view != null) view.setOnClickListener(listener); return this; } @Override public void show() { if (!isShowing()) super.show(); } @Override public void dismiss() { if (isShowing()) super.dismiss(); }}
②然后利用上面写好的基类去写一个真正要用到的dialog,例如下面实现一个带加载提示的dialog
当然,首先写好我的自定义dialog的界面XML文件
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/loading_dialog" android:layout_width="wrap_content" android:layout_height="wrap_content" android:paddingTop="15dp" android:paddingBottom="15dp" android:paddingLeft="30dp" android:paddingRight="30dp" android:background="@drawable/circle_corner_frame" android:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/iv_loading" android:layout_width="50dp" android:layout_height="50dp" android:src="@mipmap/reload" /> <TextView android:id="@+id/tv_msg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="刷新中" android:textSize="18sp" /></LinearLayout>
然后创建一个LoadingDialog类继承刚才写好的CustomDialog
public class LoadingDialog extends CustomDialog{ private ImageView iv_loading; //旋转的动画 private Animation rotate; private OnBackListener onBackListener; public LoadingDialog(Context context) { super(context, R.layout.dialog_loading); //从0度旋转到360度 rotate = new RotateAnimation(0, 360,Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); //设置时间周期为1秒 rotate.setDuration(1000); //无限重复 rotate.setRepeatCount(-1); //设置加速器(匀速) rotate.setInterpolator(new LinearInterpolator()); iv_loading = getView(R.id.iv_loading); //不能被取消 setCancelable(false); //监听返回键 setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialogInterface, int i, KeyEvent keyEvent) { if (keyEvent.getKeyCode() == KeyEvent.KEYCODE_BACK && keyEvent.getAction() == KeyEvent.ACTION_DOWN){ if (onBackListener != null){ onBackListener.onBack(); } } return true; } }); } @Override public void show() { super.show(); iv_loading.startAnimation(rotate); } /** * @param msg 提示文字 */ public void show(String msg){ ((TextView) getView(R.id.tv_msg)).setText(msg); show(); } public void show(int stringId){ ((TextView) getView(R.id.tv_msg)).setText(stringId); show(); } /** * 设置提示文字 */ public void setText(String msg){ ((TextView) getView(R.id.tv_msg)).setText(msg); } /** * 返回键的监听事件 */ public void setOnBackListener(OnBackListener l){ this.onBackListener = l; } @Override public void dismiss() { if (isShowing()) { super.dismiss(); iv_loading.clearAnimation(); } } /** * 按返回键的回调 */ public interface OnBackListener { void onBack(); }}
③接下来,看如何调用,很简单,直接实例化这个对象,然后调用show方法就可以了
//传递上下文作为参数 LoadingDialog progressDialog = new LoadingDialog(this); progressDialog.show();
要隐藏这个Dialog就调用器dismiss函数
progressDialog.dismiss();
至此,一个简单的自定义Dialog实现。如果帮助到您,请点一下赞哦,O(∩_∩)O~~
阅读全文
0 0
- 自定义Dialog android Dialog
- 【Android】Dialog以及自定义Dialog
- android 系统Dialog,自定义Dialog
- android 自定义dialog 自定义dialog 宽度问题
- Android 自定义 dialog
- Android 自定义 dialog
- Android 自定义 dialog
- Android 自定义Dialog分类
- Android Dialog( 自定义对话框)
- Android自定义Dialog
- Android-自定义Dialog样式
- Android 自定义Dialog样式
- Android:自定义dialog
- Android 自定义dialog
- Android自定义Dialog对话框
- Android 自定义dialog
- Android自定义Dialog
- Android自定义Dialog
- 我为什么鼓励工程师写blog
- STL中empty()函数的误用
- 菜鸟Python(1)
- 大数据可视化的最新动态
- 微信小程序-navigator 跳转url传递参数
- Android自定义Dialog
- (26)抽象类引入、特点、和一般类区别、抽象继承练习
- JavaWeb随心笔记(1)
- 三、C_base——常用stdio.h函数
- 计算几何之凸包模板
- Java程序员学习路线图参考
- Scanner类的匹配失败问题
- 基础sql语句执行顺序的重要性
- Privacy policy