Android自定义ProgressDialog样式 分类: Android 2015-07-03 16:17 12人阅读 评论(0) 收藏
Android系统自带的ProgressDialog样式的确不太好看,我们可以自己定义它的样式,下面看看实现
1.style.xml progressDialog继承与Dialog,先设置一下progressDialog的风格,设置背景图片。
<style name="CustomDialog" parent="@android:style/Theme.Dialog"> <item name="android:windowFrame">@null</item> <item name="android:windowIsFloating">true</item> <item name="android:windowContentOverlay">@null</item> <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> </style> <style name="CustomProgressDialog" parent="@style/CustomDialog"> <item name="android:windowBackground">@drawable/toast_frame</item> <item name="android:windowNoTitle">true</item> </style>2.customprogressdialog.xml文件,定义自己的布局,由于我的需求只需要一个进度条以及一串显示的内容,所以布局比较简单。
<pre name="code" class="html"><?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" android:padding="8dp" > <ProgressBar android:id="@+id/loadingImageView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="15dp" android:indeterminateDrawable="@drawable/progress_medium" /> <TextView android:id="@+id/id_tv_loadingmsg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:textColor="@android:color/white" android:textSize="18dp" /> </LinearLayout>3.progress_medium.xml文件.旋转效果。
<?xml version="1.0" encoding="utf-8"?> <animated-rotate xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/spinner_black_32" android:fromDegrees="0" android:pivotX="50.0%" android:pivotY="50.0%" android:toDegrees="360" />
4.CustomProgressDialog.java文件,这个是就是我们最终需要使用的progressDialog了。
package com.xxx.view; import com.xxx.activity.R; import android.app.Dialog; import android.content.Context; import android.view.Gravity; import android.widget.TextView; public class CustomProgressDialog extends Dialog { public CustomProgressDialog(Context context, String strMessage) { this(context, R.style.CustomProgressDialog, strMessage); } public CustomProgressDialog(Context context, int theme, String strMessage) { super(context, theme); this.setContentView(R.layout.customprogressdialog); this.getWindow().getAttributes().gravity = Gravity.CENTER; TextView tvMsg = (TextView) this.findViewById(R.id.id_tv_loadingmsg); if (tvMsg != null) { tvMsg.setText(strMessage); } } @Override public void onWindowFocusChanged(boolean hasFocus) { if (!hasFocus) { dismiss(); } } }修改的部分也就主要是这里,之前作者用静态方法去构造ProgressDialog,context无法释放,下面是修改后的代码。
在Activity里面构造showProgressDialog:我写在自己的父类里。
public void showProgress(int resID, boolean canBack) { if (progressDialog != null) { progressDialog.cancel(); } progressDialog = new CustomProgressDialog(activity, getResources() .getString(resID)); progressDialog.show(); }
子类继承调下这个方法就show出来了。
另附圆角对话框源码:
http://download.csdn.net/detail/u010963246/8869141