您的位置:首页 > 其它

自定义ProgressDialog的实现

2016-06-06 16:17 513 查看
要实现一个等待的圆形进度条效果,转圈的效果。可以有两种方式,第一种用progressbar,第二种用progressdialog,而progressbar在运行时用户是可以操作其他控件的。在不想让用户操作其他控件只能等待的情况下,我们用progressdialog来实现此功能。

又由于自带的progressdialog比较丑,我们想最终实现屏幕上只有一个圈和一条文字的效果如图:



下面来看代码实现:

自定义dialog并继承Dialog,创建一个dialog类方便使用

import android.app.Dialog;
import android.content.Context;
import android.view.Gravity;
import cn.tcb.destmonitoronline.R;

/**
* 自定义progressdialog的类
* Created by renchongbin on 2016/6/6.
*/
public class CustomProgressDialog extends Dialog{
private Context context = null;
private static CustomProgressDialog customProgressDialog = null;

public CustomProgressDialog(Context context){
super(context);
this.context = context;
}

public CustomProgressDialog(Context context, int theme) {
super(context, theme);
}
//创建dialog
public static CustomProgressDialog createDialog(Context context){
customProgressDialog = new CustomProgressDialog(context,R.style.CustomProgressDialog);//应用自定义style
customProgressDialog.setContentView(R.layout.progress_dialog);//加载自定义布局
customProgressDialog.getWindow().getAttributes().gravity = Gravity.CENTER;//居中
//  customProgressDialog.setCancelable(false);//设置能否取消,默认是True,也就是点击其他地方就会取消这个dialog的显示

return customProgressDialog;
}
}


下面是引用的自定义的style:

<style name="CustomProgressDialog" parent="@style/prog_dialog">
<item name="android:windowBackground">@android:color/transparent</item><!-- 背景透明-->
<item name="android:windowNoTitle">true</item>                          <!-- 没有标题-->
</style>
<style name="prog_dialog" parent="@android:style/Theme.Holo.Dialog">
<item name="android:windowFrame">@null</item><!-- 没有边框-->
<item name="android:windowIsFloating">true</item><!-- 浮在ACTIVITY上-->
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
</style>


然后是要加载的自定义布局:progress_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ProgressBar
android:id="@+id/progress_bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Large"/>
<TextView
android:id="@+id/id_tv_loadingmsg"
android:text="@string/wait_a_minute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20dp"
android:layout_marginTop="5dp"
/>

</LinearLayout>


此布局我说说明一下,由于我没有自己的等待图片,所以我就引用了系统自带的progressbar来作为要显示的图片,此效果感觉还不错。就是中间那个旋转的大圈。

自定义的progressdialog已经完成,那么下面就是使用了,在需要的地方使用他。

比如我是在登录的时候向服务器发送数据的时候弹出这个progressdialog在接受到数据之后让这个dialog消失。下面是代码:

//我的登录activity
public class LoginActivity extends AppCompatActivity {

private IntentFilter mLoginResultIntentFilter;
private LoginResultReceiver mLoginResultReceiver;
private EditText mEditUser;
private EditText mEditPw;
private CheckBox mSavePassword;
private CustomProgressDialog progressDialog = null;//声明自定义弹出框


在需要的时候弹出进度框

progressDialog = CustomProgressDialog.createDialog(LoginActivity.this);
progressDialog.show();


在任务完成之后关闭对话框

progressDialog.cancel();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  安卓 Dialog 控件