プログレスダイアログ



ダウンロードなどで表示されるダイアログです。
通常はダイアログの画面の外をタッチするとダイアログが消えてしまいますが、 setCancelable(false)により画面の外をタッチしても消えないようにしています。



■グルグル回るダイアログ

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    android.content.Context _this=this;
    boolean thread_run;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        thread_run=true;
        Thread th=new Thread(new test());
        th.start();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        thread_run=false;
    }
    android.app.ProgressDialog pd;
    private class test implements Runnable {
        android.os.Handler handler=new android.os.Handler();
        @Override
        public void run() {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    pd = new android.app.ProgressDialog(_this);
                    pd.setTitle("title");
                    pd.setMessage("message");
                    pd.setProgressStyle(android.app.ProgressDialog.STYLE_SPINNER);
                    pd.setCancelable(false);//ダイアログの外をクリックされた場合でも消えないようにする
                    pd.show();
                }
            });

            try {
                Thread.sleep(10000);
            } catch (Exception e) {}
            if(false==thread_run) return;
            handler.post(new Runnable() {
                @Override
                public void run() {
                    pd.dismiss();//ダイアログを閉じる
                }
            });
        }
    }
}
上のコードを実行すると次のようなグルグル回るダイアログが表示されます。





■進行状態を示すバーを表示する

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {
    android.content.Context _this=this;
    boolean thread_run;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        thread_run=true;
        Thread th=new Thread(new test());
        th.start();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        thread_run=false;
    }
    android.app.ProgressDialog pd;
    private class test implements Runnable {
       android.os.Handler handler=new android.os.Handler();
        @Override
        public void run() {
            handler.post(new Runnable() {
                @Override
                public void run() {
                    pd = new android.app.ProgressDialog(_this);
                    pd.setTitle("title");
                    pd.setMessage("message");
                    pd.setProgressStyle(android.app.ProgressDialog.STYLE_HORIZONTAL);
                    pd.setCancelable(false);//ダイアログの外をクリックされた場合でも消えないようにする
                    pd.setMax(100);//最大値を設定
                    pd.setProgressNumberFormat("%1d / %2d Byte");
                    pd.show();
                }
            });

            for(int i=0;i<100;i++) {
                try {
                    Thread.sleep(100);
                } catch (Exception e) {}
                if(false==thread_run) return;
                handler.post(new Runnable() {
                    @Override
                    public void run() {
                        pd.incrementProgressBy(1);//現在の値に加算、加算される値のため注意
                    }
                });
            }
            handler.post(new Runnable() {
                @Override
                public void run() {
                    pd.dismiss();
                }
            });
        }
    }
}


上のコードを実行すると次のようなバーが表示されます。
だたし、incrementProgressBy(1)はバーの値にインクリメントする値のために注意が必要です。





■バーに2本目の線を表示する


バーの値を設定する所に次のコードを追加します。

pd.incrementSecondaryProgressBy(2);

そうするとこのようになります。



二本のバーが重なって表示されているのがわかります。



■値のフォーマットを変更する




このようにダウンロードしたバイト数のように見せるには次にようにフォーマットを指定します。

pd.setProgressNumberFormat("%1d / %2d Byte");



▲トップページ > android