自定义dialog布局样式

在android开发中,对话框的使用已非常频繁,需求复杂度的提升导致dialog自带的一些样式难以满足现在的一些需求。这时候往往希望通过自定布局样式来实现特定的效果,dialog本身也支持自定义布局样式,那么如何去实现呢?

主要分为以下几个步骤:

1.创建一个Dialog对象;

2.自定义布局将填充布局到Dialog中;

3.设置宽高,防止显示不全;

下面来一步一步简单实现一下,还是先看下效果图吧:

自定义dialog布局样式_第1张图片

代码如下,直接看:

public class MainActivity extends AppCompatActivity {
    private Dialog mDialog;
    private Button bt_confirm;
    private Button bt_cancel;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void showDialog(View view){
        //1.创建一个Dialog对象,如果是AlertDialog对象的话,弹出的自定义布局四周会有一些阴影,效果不好
        mDialog = new Dialog(this);
        //去除标题栏
        mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        //2.填充布局
        LayoutInflater inflater = LayoutInflater.from(this);
        View           dialogView     = inflater.inflate(R.layout.view_dialog, null);
        //将自定义布局设置进去
        mDialog.setContentView(dialogView);
        //3.设置指定的宽高,如果不设置的话,弹出的对话框可能不会显示全整个布局,当然在布局中写死宽高也可以
        WindowManager.LayoutParams lp     = new WindowManager.LayoutParams();
        Window                     window = mDialog.getWindow();
        lp.copyFrom(window.getAttributes());
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        //注意要在Dialog show之后,再将宽高属性设置进去,才有效果
        mDialog.show();
        window.setAttributes(lp);

        //设置点击其它地方不让消失弹窗
        mDialog.setCancelable(false);
        initDialogView(dialogView);
        initDialogListener();
    }

    private void initDialogView(View view) {
        bt_confirm = (Button) view.findViewById(R.id.bt_confirm);
        bt_cancel = (Button) view.findViewById(R.id.bt_cancel);
    }

    private void initDialogListener() {
        bt_confirm.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });

        bt_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });
    }
}
布局文件就不贴出来了,总体来说,实现起来还是比较简单,但可能在实现过程中会遇到几个问题:

1. 弹出的对话框样式只显示出一部分;------宽高设置的问题

2.弹出对话框四周还有一些阴影,效果不好;-----创建Dialog对象,则不会有

3.弹出对话框顶部有一段空白,但自定义布局中没有设置啊?------将Dialog的标题栏去掉,注意要在setContentView()方法之前

具体实现可看代码,都有注释。。。。当然还可以通过activity,设置其主题为dialog的样式来实现,这个就看个人喜好了。。。。。。。






你可能感兴趣的:(android基础)