自定义Dialog,view根据需要自定义填充
2016-08-08 15:40
281 查看
在项目开发中,经常会用到各种样式的Dialog,不是特殊情况下的,通过Android系统提供了Dialog类,以及Dialog的子类,常见如AlertDialog就可以实现此类功能;
一般情况下,利用Android提供的Dialog及其子类能够满足多数此类需求,然而,其不足之处体现在:
基于Android提供的Dialog及其子类样式单一,风格上与App本身风格可能不太协调;
Dialog弹窗在布局和功能上有所限制,有时不一定能满足实际的业务需求。
这种方式不是针对某一特殊情况而作的处理,因为Dialog中的视图是开发人员自定义的,通过view,builder.setContentView(view);进行填充,这样可以满足绝大部分的需求;
使用方式:
对于view中的控件可以设置相应的监听,这里要注意的是,在findViewById的时候,要通过该view进行,否则会报错,如:
然后就可以进行相应的处理了;
难度不是很大,但是希望可以帮助有需要的人;
一般情况下,利用Android提供的Dialog及其子类能够满足多数此类需求,然而,其不足之处体现在:
基于Android提供的Dialog及其子类样式单一,风格上与App本身风格可能不太协调;
Dialog弹窗在布局和功能上有所限制,有时不一定能满足实际的业务需求。
public class CustomDialog extends Dialog { /** * 1.final Dialog builder = new CustomDialog(this); * 2.LayoutInflater inflater = (LayoutInflater) CiticRechargeActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); * 3.view = inflater.inflate(R.layout.citic_message_code, null); * 4.builder.setContentView(view); * 5.builder.show(); */ private static final float DEFAULT_WIDTH_PERCENT = 0.75f; private static final float DEFAULT_HEIGHT_PERCENT = 0.0f; private WindowManager mWindowManager; private Display mDisplay; protected LayoutInflater mInflater; public CustomDialog(Context context) { super(context, R.style.CustomDialog); mWindowManager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); mDisplay = mWindowManager.getDefaultDisplay(); mInflater = LayoutInflater.from(context); } public void show() { show(DEFAULT_HEIGHT_PERCENT, DEFAULT_WIDTH_PERCENT); } public void show(float heightPercent, float widthPercent) { super.show(); WindowManager.LayoutParams mParams = this.getWindow().getAttributes(); mParams.width = (int) (mDisplay.getWidth() * widthPercent); if (heightPercent != DEFAULT_HEIGHT_PERCENT) { mParams.height = (int) (mDisplay.getHeight() * heightPercent); } this.getWindow().setAttributes(mParams); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // back按键不做处理。 return true; } }
这种方式不是针对某一特殊情况而作的处理,因为Dialog中的视图是开发人员自定义的,通过view,builder.setContentView(view);进行填充,这样可以满足绝大部分的需求;
使用方式:
1.final Dialog builder = new CustomDialog(this); 2.LayoutInflater inflater = (LayoutInflater) CiticRechargeActivity.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 3.view = inflater.inflate(R.layout.citic_message_code, null); 4.builder.setContentView(view); 5.builder.show();
对于view中的控件可以设置相应的监听,这里要注意的是,在findViewById的时候,要通过该view进行,否则会报错,如:
iv_auth_code = (ImageView) view.findViewById(R.id.iv_auth_code);
然后就可以进行相应的处理了;
难度不是很大,但是希望可以帮助有需要的人;
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories