美文网首页
自定义ProgressDialog

自定义ProgressDialog

作者: 撕裂的我 | 来源:发表于2017-11-06 15:17 被阅读0次

    先看效果图

    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了

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:alpha="0.52"
                  android:gravity="center"
                  android:background="#111a26"
                  android:id="@+id/container"
                  android:orientation="vertical">
    
        <LinearLayout
            android:layout_width="374px"
            android:layout_height="250px"
            android:orientation="vertical"
            android:background="@drawable/gb_progress_dialog">
    
            <ProgressBar
                android:id="@+id/pb_load"
                android:layout_width="88px"
                android:layout_height="88px"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="53px"/>
    
            <TextView
                android:id="@+id/tv_load_dialog"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="32px"
                android:text="  加载中..."
                android:textColor="#ffffff"
                android:textSize="34px"/>
        </LinearLayout>
    
    
    </LinearLayout>
    
    

    可以看到中间那个圈就是一个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

          本文链接:https://www.haomeiwen.com/subject/lsdlmxtx.html