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

posted @ 2015-07-03 16:17  xiexie2015  阅读(411)  评论(0编辑  收藏  举报