web-dev-qa-db-ja.com

テキストなしで進行状況ダイアログを表示Android

Android 2.3.3

Loading ..をテキストとして表示する進捗ダイアログがあります。 progressdialogのコードは次のとおりです。

_progressDialog = new ProgressDialog(mContext);      
            progressDialog.setIndeterminate(true);
            progressDialog.setMessage("Loading...");
            progressDialog.show();
_

progressDialog.setMessage("Loading...");を削除すると、親の幅を占める左側の進捗ダイアログと右側の空のボックスが表示されます。

中央に配置されたprogressdialogのみを表示したい。以下の画像を参照してください。

これは私が持っているものです...

enter image description here

これは私が欲しいものです...

enter image description here

誰かがこれで私を助けることができますか?

32
Vamsi Challa

これを試してください1.次のようなメソッドを作成します:

public static ProgressDialog createProgressDialog(Context context) {
    ProgressDialog dialog = new ProgressDialog(context);
    try {
        dialog.show();
    } catch (BadTokenException e) {

    }
    dialog.setCancelable(false);
    dialog.getWindow()
        .setBackgroundDrawable(new ColorDrawable(Android.graphics.Color.TRANSPARENT));
    dialog.setContentView(R.layout.progressdialog);
    // dialog.setMessage(Message);
    return dialog;
}

// XMLレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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="@Android:color/transparent" >

    <ProgressBar
        Android:id="@+id/progressBar1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true" />

</RelativeLayout>

必要な場所でこのメソッドを呼び出します:

if (progressDialog == null) {
    progressDialog = Utils.createProgressDialog(Login.this);
    progressDialog.show();
} else {
    progressDialog.show();
}
72
MuraliGanesan

偶然error: "requestFeature() must be called before adding content"を取得した場合、解決策はprogressDialog.show()を呼び出す前にprogressDialog.setContentView(R.layout.progressdialog)を呼び出すことです。

23
yoram givon

以下のスタイルをstyle.xmlに追加できます

<style name="progress_bar_style">
    <item name="Android:windowFrame">@null</item>
    <item name="Android:windowBackground">@Android:color/transparent</item>
    <item name="Android:windowIsFloating">true</item>
    <item name="Android:windowContentOverlay">@null</item>
    <item name="Android:windowTitleStyle">@null</item>
    <item name="Android:windowAnimationStyle">@Android:style/Animation.Dialog</item>
    <item name="Android:windowSoftInputMode">stateUnspecified|adjustPan</item>
    <item name="Android:backgroundDimEnabled">false</item>
    <item name="Android:background">@Android:color/transparent</item>
</style>

color.xmlファイルで任意の色を追加します。

7
chaitanya

アクセントカラーを使用したマテリアルデザインでの作業と見栄え(お持ちの場合)

5.0以降のAPIバージョンの両方で動作するように努力しました。そして、解決策は、進捗ではなくダイアログでそれを作ることです。

レイアウトフォルダーにファイルを作成しますaux_progress_spinner.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
              Android:layout_width="match_parent"
              Android:layout_height="match_parent"
              Android:background="@Android:color/transparent"
              Android:gravity="center"
              Android:orientation="vertical" >

    <ProgressBar
        Android:id="@+id/progressBar1"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_gravity="center"
        Android:background="@Android:color/transparent"
        />

</LinearLayout>

どこかに関数を作成します... tils.class

   public static Dialog LoadingSpinner(Context mContext){
        Dialog pd = new Dialog(mContext, Android.R.style.Theme_Black);
        View view = LayoutInflater.from(mContext).inflate(R.layout.aux_progress_spinner, null);
        pd.requestWindowFeature(Window.FEATURE_NO_TITLE);
        pd.getWindow().setBackgroundDrawableResource(R.color.transparent);
        pd.setContentView(view);
        return pd;
    }

フラグメント/アクティビティ呼び出し:

 private Dialog progress_spinner;
 progress_spinner = Utils.LoadingSpinner(mContext);   

 //------ Where you want it ------
 progress_spinner.show();

 //------- Dismiss it --------
 progress_spinner.dismiss();

オプション:単純なCountDownTimerを追加して、外観をテストします

        new CountDownTimer(1000,1000){

            @Override public void onTick(long millisUntilFinished) {

            }

            @Override public void onFinish() {
                progress.dismiss();
            }
        }.start();
6
OWADVL

次を使用できます。

Progress progress = new ProgressDialog(getActivity(), Android.support.v4.app.DialogFragment.STYLE_NO_TITLE);

必要に応じて、Gradleの依存関係に追加します

compile 'com.Android.support:support-v4:22.2.0'
5
Gabriel Pereira

あなたが使用することができます:

progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);

また、タイトルが必要ない場合は、次のことができます。

progressDialog.setTitle(null);
1
tuannd

MuraliGanesanの答えは正しいですが、ProgressDialogではなくDialogのみを使用して「コンテンツを追加する前にrequestFeature()を呼び出す必要がある」という例外を回避します

1
Danny Liao

これを行うには、Dialogクラスを拡張する1つのクラスを作成するだけです。

クラスの下に作成したとしましょう:

public class TransparentProgressDialog extends Dialog {

    public ImageView iv;

    public TransparentProgressDialog(Context context, int resourceIdOfImage) {
        super(context, R.style.TransparentProgressDialog);
        WindowManager.LayoutParams wlmp = getWindow().getAttributes();
        wlmp.gravity = Gravity.CENTER_HORIZONTAL;
        getWindow().setAttributes(wlmp);
        setTitle(null);
        setCancelable(false);
        setOnCancelListener(null);
        LinearLayout layout = new LinearLayout(context);
        layout.setOrientation(LinearLayout.VERTICAL);
        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        iv = new ImageView(context);
        iv.setImageResource(resourceIdOfImage);
        layout.addView(iv, params);
        addContentView(layout, params);
    }

    @Override
    public void show() {
        super.show();
        RotateAnimation anim = new RotateAnimation(0.0f, 360.0f , Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f);
        anim.setInterpolator(new LinearInterpolator());
        anim.setRepeatCount(Animation.INFINITE);
        anim.setDuration(3000);
        iv.setAnimation(anim);
        iv.startAnimation(anim);
    }
}

TransparentProgressDialogをstyle.xmlに配置します。

@null @Android:color/transparent true @null @null @Android:style/Animation.Dialog stateUnspecified | adjustPan true @Android:color/transparent

これで、循環する任意の進行イメージを配置できます。

TransparentProgressDialog pDialog = new TransparentProgressDialog(mContext, R.drawable.progress);
pDialog.show();

それでおしまい。

1
KishuDroid

ProgressDialogの代わりにProgressBarを使用します。 http://developer.Android.com/reference/Android/widget/ProgressBar.html

1

MuraliGanesanの回答に基づいて、progressDialogのサブクラスを作成しました。

public class LoadingDialog extends ProgressDialog {

    public LoadingDialog(Context context) {
        super(context);
    }

    @Override
    public void show() {
        super.show();
        setCancelable(false);
        getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        setContentView(R.layout.custom_progress_dialog);
    }
}

また、res/layoutにcustom_progress_dialog.xmlを作成する必要があります

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:background="@Android:color/transparent"
    Android:layout_gravity="center">

    <ProgressBar
        Android:id="@+id/progressBar1"
        style="?android:attr/progressBarStyleLarge"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_centerInParent="true" />

</RelativeLayout>

そして、次のように簡単に使用できます。

LoadingDialog dialog = new LoadingDialog(this);
dialog.show();
:
:
dialog.dismiss();
0
Chuy47

MonoDroidでのこの作業:

progressDialog.SetMessage((string)null);

Javaでこれを試してください。

progressDialog.setMessage(null);
0
Ludwo
ProgressDialog.show(this, null,"", true);
0
Woona