Android控件学习——自定义Dialog对话框

首先创建好一个布局,这里假设已经存在一个布局文件

dialog_layout.xml

然后在activity或者fragment中添加监听方法

class MainActivity extends AppCompatActivity {
    protected void onCreate (Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //这里给要调用对话框的组件设置监听
        //这里以一个按钮为例
        Button button = findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //这里调用自己声明的方法
                //设置对话框的布局内的组件的监听
                //以及设置对话框的属性
                showDialog();
            }
        });
    }
    
    private void showDialog() {
        //首先需要获得布局
        View view = LayoutInflater.from(this)
                .inflate(R.layout.dialog_layout, null, false);
        //其次使用安卓提供的方法来生成对话框组件
        final AlertDialog dialog = new AlertDialog.Builder(this).setView(view).create();
        
        //这里初始化自定义布局的组件
        //这里以按钮为例
        Button button = findViewById(R.id.btn);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //这里实现组件想要的功能
                dialog.dismiss();//对话框会消失
            }
        });
        
        //这里让对话框显示
        //对话框的属性设置必须要在该方法执行后才能有效
        dialog.show();
        
        //此处设置位置窗体大小,
        dialog.getWindow().setLayout(width,height);
        
        //这个方法可以设置对话框弹出的位置
        //Gravity.BOTTOM Gravity.TOP Gravity.CENTER
        //可以分别设置顶部,中部,底部弹出
        Window win = dialog.getWindow();
        win.setGravity(Gravity.BOTTOM);
        
        //Android4.0以上AlertDialog,包括其他自定义的dialog,在触摸对话框边缘外部,对话框消失。
        //可以设置这么一条属性,当然必须先AlertDialog.Builder.create()之后才能调用这两个方法
        //方法一:
        setCanceledOnTouchOutside(false);//调用这个方法时,按对话框以外的地方不起作用。按返回键还起作用
        //方法二:
        setCancelable(false);//调用这个方法时,按对话框以外的地方不起作用。按返回键也不起作用
        
    }
}
Last modification:April 4th, 2019 at 07:03 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment