Android开发之万能的Dialog,通过自定义灵活布局Dialog,实现任意dialog样式,可修改性极强,可封装在框架中

Android 开发笔记:

使用布局打造任意的Dialog样式
Android开发之万能的Dialog,通过自定义灵活布局Dialog,实现任意dialog样式,可修改性极强,可封装在框架中_第1张图片
Android开发之万能的Dialog,通过自定义灵活布局Dialog,实现任意dialog样式,可修改性极强,可封装在框架中_第2张图片
自定义Dialog【CustomDialog.java】

public class CustomDialog extends Dialog {
    //定义模板
    public CustomDialog(Context context, int layout, int style) {
        this(context,WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                layout,style,Gravity.CENTER);  // 上下文/宽/高/布局/主题/方向
    }

    //定义属性
    public CustomDialog(Context context, int width, int height, int layout, int style, int gravity, int anim){
        super(context,style);
        //设置属性
        setContentView(layout);
        Window window = getWindow();
        WindowManager.LayoutParams layoutParams = window.getAttributes();
        layoutParams.width = width;
        layoutParams.height = height;
        layoutParams.gravity = gravity;
        window.setAttributes(layoutParams);//传入值
        window.setWindowAnimations(anim);//加动画
    }

    //实例
    public CustomDialog(Context context, int width, int height, int layout, int style, int gravity){    //anim动画统一,所以直接定义不用传值
        this(context,width,height,layout,style,gravity,R.style.pop_anim_style);
    }
}

.
进入的动画【pop_in.xml】



    
    


.
退出的动画【pop_out.xml】



    
    

.
背景【bg.xml】



    
    
        
            
            
        
    
    
    
        
            
            
        
    

.
在【styles.xml】中添加样式

    
    

    

.
最后【MainActivity.java】

public class MainActivity extends AppCompatActivity {

    private CustomDialog mDialog;  //new一个提示框
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initView();
    }

    private void initView() {
        // 初始化 Dialog
        mDialog = new CustomDialog(MainActivity.this, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT,
                R.layout.dialog_time, R.style.Theme_dialog, Gravity.CENTER, 0);
        //屏幕外点击无效
        mDialog.setCancelable(false);

        TextView Dialog_Cancel = mDialog.findViewById(R.id.Dialog_Cancel);
        TextView Dialog_Enter = mDialog.findViewById(R.id.Dialog_Enter);
        Button Button = findViewById(R.id.Button);

        Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.show();
            }
        });
        Dialog_Cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mDialog.dismiss();
            }
        });

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

.
布局文件【activity_main.xml】




    

.
布局文件【dialog_time.xml】




    

        
        

        

        

            

            

            
        
    


源码下载:https://download.csdn.net/download/erp_lxkun_jak/11539078

你可能感兴趣的:(Android)