Как создать пользовательский ProgressDialog для Android? (Не очищенные размеры стандартного ProgressDialog)

#java #android

#java #Android

Вопрос:

Помогите мне создать пользовательский ProgressDialog. Я сделал так:

custom_progressdialog.xml

 <?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/progressdialog"
    android:orientation="vertical" >

    <ProgressBar
        android:id="@ id/progressBar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"/>

    <TextView
        android:id="@ id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Загрузка...
        "
        android:textStyle="bold"
        android:textColor="@android:color/darker_gray"
        android:layout_marginTop="8dp"/>

</LinearLayout>
 

progressdialog.xml

 <shape xmlns:android="http://schemas.android.com/apk/res/android" >

    <solid android:color="#d4ffffff" />

    <corners android:radius="10dp" />

    <padding android:left="15dp" android:top="15dp" android:right="15dp" android:bottom="15dp"/>

</shape>
 

И мой файл Java:

 pd = new ProgressDialog(getActivity());
pd.show();
pd.setContentView(R.layout.custom_progressdialog);
pd.setCancelable(false);
 

Я понимаю это:

введите описание изображения здесь

Почему это происходит? Какие настройки внести?

У меня есть:

введите описание изображения здесь

Комментарии:

1. И что именно вы пытаетесь получить?

2. Обновление @KurtVandenBranden

Ответ №1:

Вот мой класс для создания пользовательского диалога прогресса

 package yourpackage.abc;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.graphics.drawable.AnimationDrawable;
import android.view.Gravity;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomProgress extends Dialog implements OnDismissListener {
    public CustomProgress(Context context) {
        super(context);
    }

    public CustomProgress(Context context, int theme) {
        super(context, theme);
    }

    public void onWindowFocusChanged(boolean hasFocus) {
        if (hasFocus) {
            ImageView imageView = (ImageView) findViewById(R.id.spinnerImageView);
            AnimationDrawable spinner = (AnimationDrawable) imageView
                    .getBackground();
            spinner.start();
        }
    }

    public void setMessage(CharSequence message) {
        if (message != null amp;amp; message.length() > 0) {
            findViewById(R.id.message).setVisibility(View.VISIBLE);
            TextView txt = (TextView) findViewById(R.id.message);
            txt.setText(message);
            txt.invalidate();
        }
    }

    public static CustomProgress show(Context context, String message,
            boolean indeterminate, boolean cancelable) {
        CustomProgress dialog = new CustomProgress(context, R.style.ProgressHUD);
        dialog.setTitle("");
        dialog.setContentView(R.layout.anim_hud);
        if (message == null || message.length() == 0) {
            dialog.findViewById(R.id.message).setVisibility(View.GONE);
        } else {
            TextView txt = (TextView) dialog.findViewById(R.id.message);
            txt.setText(message);
        }
        dialog.setCancelable(cancelable);
        // dialog.setOnCancelListener(cancelListener);
        dialog.getWindow().getAttributes().gravity = Gravity.CENTER;
        WindowManager.LayoutParams lp = dialog.getWindow().getAttributes();
        lp.dimAmount = 0.2f;
        dialog.getWindow().setAttributes(lp);
        // dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
        try {
            dialog.show();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }

        return dialog;
    }

    @Override
    public void onDismiss(DialogInterface arg0) {
        System.out.println("dismiss is called");

    }
}
 

вот anim_hud.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:orientation="vertical"
    android:paddingBottom="20dp"
    android:paddingLeft="30dp"
    android:paddingRight="30dp"
    android:paddingTop="20dp" >

    <ImageView
        android:id="@ id/spinnerImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@anim/spinner_anim" />

    <TextView
        android:id="@ id/message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:text="Message"
        android:textColor="#FFFFFF" />

</LinearLayout>
 

скопируйте это в свой style.xml ПрогрессХУД

 <style name="ProgressHUD" 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>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
    </style>
 

вставьте это spinner_anim.xml в вашу папку anim

 <animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false" >

    <item
        android:drawable="@drawable/spinner_0"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_1"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_2"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_3"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_4"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_5"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_6"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_7"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_8"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_9"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_10"
        android:duration="60"/>
    <item
        android:drawable="@drawable/spinner_11"
        android:duration="60"/>
</animation-list>
 

Ответ №2:

 pd = new ProgressDialog(getActivity());
pd.show();
pd.getWindow().setBackgroundDrawableResource(R.color.transparent);
pd.setContentView(R.layout.custom_progressdialog);
pd.setCancelable(false);
 

Комментарии:

1. Предоставьте больше содержимого в поддержку вашего ответа, добавив только фрагмент кода, который, похоже, не является хорошим ответом.