2012年8月24日金曜日

タイトルバー文字列の変更

通常タイトルバーにはstrings.xml内のapp_nameに指定されている文字列(アプリケーション名)が表示されますが、この文字列の変更が可能です。今回はタイトルバーの文字列を一時的に変更してみることにします。


タイトルバー文字列の変更



サンプルプログラムは「タイトルバーにプログレス(バー)の表示」で作成したプログラムをもとに作成します。当該プログラムではタイトルバーにプログレスバーを表示しますが、その間にタイトルバー文字列の後に続けて進捗率を示すパーセンテージを表示します。


TitleBarStringTest1aActivity.java
package jp.co.triware.samples.TitleBarStringTest1a;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.Toast;

public class TitleBarStringTest1aActivity extends Activity {
    // プログレスバーの更新周期(100)から増分値を設定
    private static final int prograssPeriod = (Window.PROGRESS_END - Window.PROGRESS_START) / 100;
    private int progressUpdate;
    private int percentage;
    private CharSequence titleString;
    private Handler handler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // タイトルバーにプログレスバーを設定する
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);

        handler = new Handler();
        Button btnStart = (Button)findViewById(R.id.start_btn);
        btnStart.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                progressUpdate = 0;

                // タイトル文字列の保存
                titleString = getTitle();

                // プログレスバー表示開始
                setProgressBarVisibility(true);
                Toast.makeText(getApplicationContext(), "Processing....", Toast.LENGTH_LONG).show();

                // プログレスバー表示中の処理(別スレッドで実行)
                (new Thread(runnable)).start();
            }
        });
    }

    // 10秒後にダイアログを閉じる
    private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            for (percentage = 1; percentage <= 100; percentage ++) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    ;
                }

                // プログレスバーの進捗率計算
                progressUpdate += prograssPeriod;

                handler.post(new Runnable() {
                    public void run() {
                        // プログレスバーを更新する
                        setProgress(progressUpdate);

                        // 進捗率をタイトルバーに表示する
                        setTitle(titleString + "                                  " + Integer.toString(percentage) + "%");
                    }
                });
            }

            handler.post(new Runnable() {
                public void run() {
                    // タイトルバーを元に戻す
                    setTitle(titleString);

                    // プログレスバー表示終了
                    setProgressBarVisibility(false);
                    Toast.makeText(getApplicationContext(), "Done.", Toast.LENGTH_SHORT).show();
                }
            });
        }
    };
}

プログレスを10秒間表示して終了することにします。プログレスの進捗状況の更新は100ms毎に100回行うことによって0~100%までを表します。

先ず、現在のタイトルバーの文字列を取得します。35行目のgetTitle();でこの処理を行っています。

処理中に進捗率を数値で表示している箇所が67行目setTitle(titleString + ...);です。今回のサンプルプログラムではプログレスバーの更新回数が100回なので、このカウンタをパーセンテージとして表示しています。
※パーセンテージの表示位置は動作確認に使用した機種(MEDIAS N-04C)で調整しています。実際のアプリケーションに組み込む場合は表示方法に工夫が必要です。

処理が終了してタイトルバーの文字列を元に戻しているのは、75行目のsetTitle(titleString);です。

画面レイアウトは「タイトルバーにプログレス(バー)の表示」のレイアウトと同じです。

main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <Button
        android:id="@+id/start_btn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Start ProgressBar on TitleBar"
        />
</LinearLayout>

Androidプロジェクトの設定
プロジェクト名:TitleBarStringTest1a
アプリケーション名:TitleBarStringTest1a
パッケージ名:jp.co.triware.samples.TitleBarStringTest1a
アクティビティーの作成:TitleBarStringTest1aActivity
ビルドターゲットや最小SDKバージョンは、お使いの開発環境に合わせて設定してください。

実行結果



プログレス表示中、タイトルバーに数値で進捗率が表示されます。


10秒間待つとプログレスバーがフェードアウトして消えます。

0 件のコメント:

コメントを投稿