一个简单的自定义Dialog
来源:互联网 发布:网络直播行业真火虚火 编辑:程序博客网 时间:2024/05/20 14:17
在平时的开发中,我们可能时常需要自定义Dialog,比如常见的需求,通知提示用户的dialog,第二种是从底部弹出的dialog,第三种是带输入框的dialog等。下面就是对一个自定义dialog的简单的封装。
直接看效果,不会作图,图都是网上找的。
1,看普通的提示框效果,我只是展示效果,界面并不是很详细
2,从底部弹出效果
3,带输入控件的弹出效果,自动启动输入法
下面时自定义的CustomDialog类:
/** * Created by wjq on 2017/5/16. */public class CustomDialog extends Dialog{ private Context context; private int height, width; private boolean cancelTouchout; private View view; private int mLocation; //dialog从哪里弹出 private int dialogAnim; //dialog显示隐藏动画 private CustomDialog(Builder builder) { super(builder.context); context = builder.context; height = builder.height; width = builder.width; mLocation = builder.location; cancelTouchout = builder.cancelTouchout; view = builder.view; } private CustomDialog(Builder builder, int resStyle) { super(builder.context, resStyle); context = builder.context; height = builder.height; width = builder.width; mLocation = builder.location; cancelTouchout = builder.cancelTouchout; view = builder.view; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(view); setCanceledOnTouchOutside(cancelTouchout); Window win = getWindow(); WindowManager.LayoutParams lp = win.getAttributes(); lp.gravity = mLocation; lp.height = height; lp.width = width; win.setAttributes(lp); } public static final class Builder { private Context context; private int height, width; private boolean cancelTouchout; private View view; private int resStyle = -1; //dialog显示样式文件 private int location = Gravity.CENTER; //默认从中间弹出 private int animStyle = -1; //dialog进入及关闭时动画的样式文件 public Builder(Context context) { this.context = context; } public Builder view(int resView) { view = LayoutInflater.from(context).inflate(resView, null); return this; } public Builder heightpx(int val) { height = val; return this; } public Builder widthpx(int val) { width = val; return this; } public Builder heightdp(int val) { height = DensityUtil.dip2px(context, val); return this; } public Builder widthdp(int val) { width = DensityUtil.dip2px(context, val); return this; } public Builder heightDimenRes(int dimenRes) { height = context.getResources().getDimensionPixelOffset(dimenRes); return this; } public Builder widthDimenRes(int dimenRes) { width = context.getResources().getDimensionPixelOffset(dimenRes); return this; } public Builder style(int resStyle) { this.resStyle = resStyle; return this; } public Builder dialogStyle(){ this.animStyle = resStyle; return this; } public Builder location(int location){ this.location = location; return this; } public Builder cancelTouchout(boolean val) { cancelTouchout = val; return this; } public Builder addViewOnclick(int viewRes,View.OnClickListener listener){ view.findViewById(viewRes).setOnClickListener(listener); return this; } public CustomDialog build() { if (resStyle != -1) { return new CustomDialog(this, resStyle); } else { return new CustomDialog(this); } } }}
当没有输入控件时Dialog样式
<style name="Dialog" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@color/full_transparent</item> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">false</item> <item name="android:windowContentOverlay">@null</item> <item name="android:backgroundDimEnabled">true</item> </style>
当有输入控件时Dialog样式
<style name="inputDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowBackground">@color/full_transparent</item> <item name="android:windowFrame">@null</item> <item name="android:windowNoTitle">true</item> <item name="android:windowIsFloating">true</item> <item name="android:windowIsTranslucent">false</item> <item name="android:windowContentOverlay">@null</item> <item name="android:backgroundDimEnabled">true</item> <!--下面这个是针对带输入内容的dialog时设置输入法自动弹出--> <item name="android:windowSoftInputMode">adjustResize|stateAlwaysVisible</item> </style>
整个使用该自定义Dialog的类如下:
/*** * create by wjq */public class MainActivity extends AppCompatActivity implements View.OnClickListener { Button btn_dialog_one; Button btn_dialog_two; Button btn_dialog_three; CustomDialog dialog_one; CustomDialog dialog_two; CustomDialog dialog_three; CustomDialog.Builder builder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btn_dialog_one = (Button) findViewById(R.id.btn_dialog_one); btn_dialog_two = (Button) findViewById(R.id.btn_dialog_two); btn_dialog_three = (Button) findViewById(R.id.btn_dialog_three); btn_dialog_one.setOnClickListener(this); btn_dialog_two.setOnClickListener(this); btn_dialog_three.setOnClickListener(this); builder = new CustomDialog.Builder(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btn_dialog_one: showDialogOne(); break; case R.id.btn_dialog_two: showDialogtwo(); break; case R.id.btn_dialog_three: showDialogthree(); break; } } private void showDialogthree() { dialog_three = builder.style(R.style.inputDialog) .heightDimenRes(R.dimen.dialog_height) .widthDimenRes(R.dimen.dialog_width) .cancelTouchout(true) .view(R.layout.dialog_three) .build(); dialog_three.show(); } private void showDialogOne() { dialog_one = builder.style(R.style.Dialog) //Dialog的样式 .heightDimenRes(R.dimen.dialog_height) //Dialog高 .widthDimenRes(R.dimen.dialog_width) //Dialog宽 .cancelTouchout(true) //点击Dialog外面,Dialog是否关闭 .view(R.layout.dialog_one) //Dialog布局文件 .build(); dialog_one.show(); } private void showDialogtwo() { dialog_one = builder.style(R.style.Dialog) .heightDimenRes(R.dimen.dialog_height) .widthDimenRes(R.dimen.dialog_width) .location(Gravity.BOTTOM) .cancelTouchout(true) .view(R.layout.dialog_two) .build(); dialog_one.show(); }}
上面就是对Dialog的简单封装。完整demo下载DialogDemo
阅读全文
0 0
- 一个简单的自定义Dialog
- 一个简单的自定义Dialog
- 实现一个简单的自定义Dialog弹窗。
- 简单的自定义一个拥有圆角的Dialog
- 自定义Dialog的简单实现
- 简单快捷的自定义 Dialog
- Android 简单的自定义Dialog
- Android 简单的自定义dialog
- 一个简单的Dialog实现
- 自定义一个只有一个图片的dialog
- 一个自定义的修改用户名的dialog
- android最简单的自定义全屏Dialog
- Android简单实用的自定义Dialog
- Android自定义最简单的dialog
- android 自定义dialog的简单实现
- Android 自定义Dialog的简单实现
- 自定义一个在底部显示的dialog
- 自定义dialog简单封装
- modelsim 10.4 UVM 仿真流程
- selenium之 时间日期控件的处理
- jpa 原生insert\delete\update\select语句
- xcode模拟器屏幕旋转快捷键
- 项目目标和范围管理 技能点八 如何制定并完善工作分解结构
- 一个简单的自定义Dialog
- 【jzoj100000】【ZJOI2017】【仙人掌】【树型动态规划】
- MySQL常用命令
- MATLAB之find的用法
- C++作业六
- Python代码流程梳理
- 多个Activity同用一个布局或控件
- POJ2976-Dropping tests
- uva 116 Unidirectional TSP(dp-递归版)