android 自定义dialog小米华为机型适配问题

在开发项目时,ui和ux提出需要统一app的弹出框样式的需求,拿到这个需求之后,考虑做一个定制的 alertdialog 来实现这个需求,由于这个dialog的式样是圆角矩形的白色背景,所以写了如下代码来设置:

mCustomDialog = new AlertDialog.Builder(this).create();
View view = getLayoutInflater().inflate(R.layout.base_alertdialog, null);
TextView titleTv = (TextView) view.findViewById(R.id.dialog_title);
TextView contentTv = (TextView) view.findViewById(R.id.dialog_content);
TextView okBtn = (TextView) view.findViewById(R.id.positive_btn);
TextView cancelBtn = (TextView)view.findViewById(R.id.negative_btn);
titleTv.setText(title);
contentTv.setText(content);
okBtn.setText(okText);
cancelBtn.setText(cancelText);
okBtn.setOnClickListener(okBtnClickListener);
cancelBtn.setOnClickListener(cancelBtnClickListener);
mCustomDialog.setView(view);
mCustomDialog.setCancelable(true);
mCustomDialog.show();
Point point = new Point();
getWindowManager().getDefaultDisplay().getSize(point);
int width = point.x;width = width - UIUtil.dip2px(this, 60);
WindowManager.LayoutParams params = mCustomDialog.getWindow().getAttributes();
params.width = width;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.gravity = Gravity.CENTER;
mCustomDialog.getWindow().setAttributes(params);
//给dialog的窗口设置一个空背景,这样圆角背景能得到正确显示
mCustomDialog.getWindow().setBackgroundDrawable(new BitmapDrawable());

layout:









    

    



背景:






但是这样存在一个机型适配的问题,在华为和红米手机上这种设置的圆角矩形背景不适用,为了解决这个问题,查了下网上的解决方案,最后还是决定用一个自定义的dialog 并自定义style来解决这个问题:

public class PADialog extends Dialog {
private Context context;
private TextView okBtn;
private TextView cancelBtn;
private TextView titleTv;
private TextView contentTv;
private static int mTheme = R.style.PADialog;
public PADialog(Context context) {
    super(context, mTheme);
    this.context = context;
}
public PADialog(Context context, int theme) {
    super(context, theme);
    this.context = context;
 }
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); 
   this.setContentView(R.layout.base_alertdialog);
    okBtn = (TextView) findViewById(R.id.positive_btn); 
   cancelBtn = (TextView) findViewById(R.id.negative_btn); 
   titleTv = (TextView) findViewById(R.id.dialog_title); 
   contentTv = (TextView) findViewById(R.id.dialog_content);
}
public void setAllText(String title, String content, String okBtnText, String cancelBtnText) {
    if (!TextUtils.isEmpty(title)) { 
       titleTv.setText(title);
    } 
   if (!TextUtils.isEmpty(content)) {
        contentTv.setText(content);
    }
    if (!TextUtils.isEmpty(okBtnText)) {
        okBtn.setText(okBtnText);
    } 
   if (!TextUtils.isEmpty(cancelBtnText)) {
        cancelBtn.setText(cancelBtnText); 
   }
}
public void setClickListener(View.OnClickListener okClickListener, View.OnClickListener cancelClickListener) {
    okBtn.setOnClickListener(okClickListener);
    if (cancelClickListener != null) {
        cancelBtn.setVisibility(View.VISIBLE);            cancelBtn.setOnClickListener(cancelClickListener);
    } 
   else {
        cancelBtn.setVisibility(View.GONE);
    }
}
}

style:



因为小米和华为系统在改变了系统层面的alertdialog的style,所以在外层修改它的背景什么的都是不起作用的,自定义一个继承于dialog的自定义dialog并自定义style才能达到预期的效果,另外小米1s上dialog的布局设置底部margin无效只能设置底部的padding才能起作用,这个也是一个坑。

你可能感兴趣的:(android 自定义dialog小米华为机型适配问题)