一个简单的等待加载框

项目中在进行耗时操作时,譬如网络请求,经常需要使用加载框,以下为一个简单的等待加载框的实现。

我们直接继承Dialog类,

public WaitingDialog(Activity activity, String content) {
        this(activity, R.style.waiting_dialog_style, content);
    }

    public WaitingDialog(Activity activity, int theme, String content) {
        super(activity, theme);
        this.content = content;

        setOwnerActivity(activity);
    }

第一个构造将theme固定,以下仅做参考:

 <!-- 默认窗口样式 -->
    <style name="default_dialog_style" parent="@android:style/Theme.Dialog">

        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <!-- 边框 -->
        <item name="android:windowContentOverlay">@null</item>
        <!-- 标题 -->
        <item name="android:windowFullscreen">true</item>
        <item name="android:backgroundDimEnabled">true</item>
        <!-- 模糊 -->
    </style>

    <!-- 加载等待框样式 -->
    <style name="waiting_dialog_style" parent="@style/default_dialog_style">
        <item name="android:backgroundDimEnabled">true</item>
        <item name="android:windowBackground">@drawable/bg_waiting_dialog_white</item>>
    </style>
 
其中,backgroundDimEnabled属性表示弹出框时,屏幕其余区域是否变暗。

接下来,我们在onCreate中加载布局文件,进行设置提醒内容等操作。

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

    private void initView() {
        setCanceledOnTouchOutside(false);

        waitingShow = (TextView) findViewById(R.id.pub_tv_waiting_show);

        if (TextUtils.isEmpty(content)) {
            waitingShow.setVisibility(View.GONE);
        } else {
            setContent(content);
        }
    }

    @Override
    public void setCanceledOnTouchOutside(boolean cancel) {
        super.setCanceledOnTouchOutside(cancel);
    }

    @Override
    public void setCancelable(boolean flag) {
        super.setCancelable(flag);
    }

    /**
     * 设置提醒内容
     */
    public void setContent(String content) {
        if (TextUtils.isEmpty(content)) {
            waitingShow.setVisibility(View.GONE);
        } else {
            waitingShow.setVisibility(View.VISIBLE);
            waitingShow.setText(content);
        }
    }


这里,注意一下布局文件,

<ProgressBar
        android:id="@+id/pub_pb_waiting"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:indeterminateDrawable="@drawable/rotate_waiting" />

    <TextView
        android:id="@+id/pub_tv_waiting_show"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:textColor="@android:color/black"
        android:textSize="19sp"/>


主体部分包含一个ProgressBar和一个TextView,其中interminateDrawable设置不定模式的背景样式。

我们将背景设为转动的“菊花”。

<?xml version="1.0" encoding="utf-8"?>
<animated-rotate xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@mipmap/loading"
android:pivotX="50%"
android:pivotY="50%"/>

如此一来,加载的效果就是无限转“菊花”了。

最后,如果要设定点击back键的逻辑,可以通过自定义监听器实现:

public void setOnBackPressedListener(OnBackPressedListener listener) {
        this.listener = listener;
    }

    @Override
    public void onBackPressed() {
        if (null != listener) {
            listener.onBackPressed();
        }
    }

    public interface OnBackPressedListener {
        void onBackPressed();
    }


以上。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值