您的位置:首页 > 移动开发

自定义Dialog,view根据需要自定义填充

2016-08-08 15:40 281 查看
在项目开发中,经常会用到各种样式的Dialog,不是特殊情况下的,通过Android系统提供了Dialog类,以及Dialog的子类,常见如AlertDialog就可以实现此类功能;

一般情况下,利用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);


然后就可以进行相应的处理了;

难度不是很大,但是希望可以帮助有需要的人;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息