安卓自定义Dialog
来源:互联网 发布:相机双重曝光软件 编辑:程序博客网 时间:2024/05/17 20:25
以前Dialog用的并不多,所以也没有想过把系统自带的Dialog美化一下什么的,今天做仿微博选择性别的时候需要自定义一个Dialog,网上查了查,有不少的例子,但是很多都不是能直接用的,这也就是传说中的程序都是调试出来的吧,花了一下午做了一个自定义的Dialog(用的时间太长了,不得不说,效率实在是太低了,都学了一年多的安卓了,现在还是一只连菜鸟都算不上的小白)
废话不多说,感慨也还是留着晚上睡觉的时候吧,现在开始自定义Dialog!!!
新建一个叫做CustomDialog的Java文件,并且继承Dialog,这时候系统会提示创建构造函数的,最好是把3个构造函数都创建上,虽然很多时候并用不上,但是我记得又一次自定义控件的时候只创建了只有参数Context的构造函数,但是他报错了,改正方法就是把所有的构造函数都创建上。
需要说一下的就是AlertDialog并没有自己的构造函数,平时我们用AlertDialog的时候都是通过Builder这个类的构造函数来创建弹出框的,所以自定义弹出框,最重要的当然也就是Builder的重写,这是我重写的Builder,因为我只是要把弹出框的布局自定义为圆角的,所以这里我只是重写了得到布局的方法,其他的比如标题,图片什么的也都可以这样重写,这不过对于这些来说重写的时候一个控件好像是要只有参数不同的两个相同的方法(大家可以自己试一试,我没有做,毕竟他不符合我的要求)
public static class Bulider implements View.OnClickListener{ private Context context; private View contentView; private TextView man,woman; private CustomDialog customDialog; private CustomDialogPassValue customDialogPassValue; public Bulider(Context context,CustomDialogPassValue customDialogPassValue){ this.context = context; this.customDialogPassValue = customDialogPassValue; } public Bulider setContentView(View view){ this.contentView = view; return this; } public CustomDialog create(){ LayoutInflater layoutInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); customDialog = new CustomDialog(context, R.style.dialog); View layout = layoutInflater.inflate(R.layout.changesex,null); //addContentView(View view,ViewGroup.LayoutParams params):在屏幕中添加一个额外的视图,添加之后屏幕中原来的视图不会被删除 //View view:新添加的视图 //ViewGroup.LayoutParams params:视图的布局参数 customDialog.addContentView(layout,new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); customDialog.setContentView(layout); man = (TextView)layout.findViewById(R.id.man); woman = (TextView)layout.findViewById(R.id.woman); man.setOnClickListener(this); woman.setOnClickListener(this); return customDialog; } @Override public void onClick(View v) { switch (v.getId()){ case R.id.man: customDialogPassValue.passValue("男"); customDialog.dismiss(); break; case R.id.woman: customDialogPassValue.passValue("女"); customDialog.dismiss(); break; } }}需要提一下的就是
R.style.dialog
就是自定义弹出框的布局形式,直接上代码
<style name="dialog" parent="android:style/Theme.Dialog"> <item name="android:background">#00000000</item> <!--透明色(#00000000)(@android:color/transparent)--> <item name="android:windowBackground">@android:color/transparent</item> <!--标题栏被隐藏--> <item name="android:windowNoTitle">true</item> <!--悬浮类型--> <item name="android:windowIsFloating">true</item></style>这样自定义的弹出框就完成了。效果图:
虽然弹出框是完成了,但是对于项目来说还有一个问题就是在选择了性别之后需要在原来的布局文件上显示出来,现在问题就来了,我现在知道的传值方式有两种,Intent、Bundle,大同小异,很明显的,这两种方法对于这个项目都不合适,最终的解决办法是接口(之前只知道接口能传值,但是一直不太会用,正好学了学)
public interface CustomDialogPassValue{ void passValue(String id);}这是我在CustomDialog中定义的接口,向外传值的方法,在第一段的代码中都有,现在就剩一个问题了,怎么把值取出来。也不难,在调用自定义弹出框构造函数的时候嗲用接口就行了,下面就是代码,so简单。。
final CustomDialog.Bulider bulider = new CustomDialog.Bulider(this,new CustomDialog.CustomDialogPassValue(){ @Override public void passValue(String id) { newSex.setText(id); }});bulider.create().show();
- 安卓自定义Dialog
- 安卓自定义dialog文章
- 安卓开发自定义dialog
- 安卓自定义透明Dialog
- 安卓开发之自定义Dialog
- 安卓自定义超级提示框Dialog
- 安卓自定义Dialog的实现
- 安卓Dialog自定义大小及居中
- 安卓学习之—自定义Dialog
- 安卓自定义Dialog之BaseDialog
- 安卓自定义Dialog(一)
- 安卓自定义Dialog(二)
- 安卓自定义Dialog(三)
- 安卓自定义Dialog(四)
- 解决安卓自定义Dialog不能水平填满屏幕
- 安卓自定义对话框(android.app.Dialog)
- 安卓控件Dialog
- 安卓dialog主题
- 【安全牛学习笔记】DNS协议隧道、DNS协议隧道-dns2tcp
- Android中资源管理机制详细分析
- [转自Oracle官方技术博客]SLES12 SP2上遇到ORA-12518: TNS:listener could not hand off client connection
- QT(0):HelloWorld-程序的运行与发布
- 【项目经理之修炼(1)】《序章》关于要写给谁看的问题
- 安卓自定义Dialog
- 3Sum
- Java DecimalFormat 用法
- 学习笔记:Android ViewDragHelper的使用
- 扩展thinkphp5的redis类方法
- 变量替换扩展
- Kylin 的优化以及使用总结
- javascript作用域和执行上下文的区别
- javaPAT1021个位数统计