自定义ProgressDialog

先看效果图

GIF.gif

自定义的ProgressDialog充满了整个屏幕。

  • 创建自定义的ProgressDialog
public class MyProgressDialog extends Dialog {
    public MyProgressDialog(Context context)
    {
        super(context);
    }

    public MyProgressDialog(Context context, int theme)
    {
        super(context, theme);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        init(getContext());
    }

    private void init(Context context)
    {
        setCancelable(false);
        Window window = getWindow();

        requestWindowFeature(Window.FEATURE_NO_TITLE);

        setContentView(R.layout.load_dialog);

        //去除顶部状态栏
        int flag = WindowManager.LayoutParams.FLAG_FULLSCREEN;
        window.setFlags(flag,flag);

        WindowManager.LayoutParams params = window.getAttributes();
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.MATCH_PARENT;
        window.setAttributes(params);
        //设置不可取消
        //点击其他区域不能取消
//        setCanceledOnTouchOutside(true); 这里是没有效果的,因为范围是全屏
        findViewById(R.id.container).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dismiss();
            }
        });
    }

    @Override
    public void show()
    {
        super.show();
    }

}


整个过程还是很简单的,但是要注意A,B,C三者的顺序

image.png

如果顺序不对,会报错,或者达不到想要的效果。

因为我们这里的ProgressDialog的范围是全屏,所以点击外部的方法会失效,我们这里就设置点击事件,点击屏幕任意地方就dissmiss()。

image.png

下面是布局代码,我图省事就直接px了



    

        

        
    




可以看到中间那个圈就是一个ProgressBar。
然后是MAinActivity

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        findViewById(R.id.ProgressDialog).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                MyProgressDialog dialog = new MyProgressDialog(MainActivity.this, R.style.CustomDialog);
                dialog.show();
            }
        });
    }
}

最后我们还要设置MyProgressDialog的style。

image.png

这样全屏的自定义的ProgressDialog就完成了。

你可能感兴趣的:(自定义ProgressDialog)