妄想プログラマのらくがき帳 : 4月 2013

2013年4月10日水曜日

[Android]Toastを表示する。

Toastとは、一定時間が経過すると自動的に消えるポップアップメッセージです。
メールの問い合わせをしたときに「新着メールがn件あります。」と出てきますが、あれがToastです。
そのToastの表示方法をまとめてみました。

・一般的なToast

よく見る画面下部に表示されるToastです。

Toast.makeText(getApplicationContext(), "toast message.", Toast.LENGTH_LONG).show();
3番目の引数はToastの表示時間を指定します。指定できる値は、Toast.LENGTH_LONGかToast.LENGTH_SHORTの2種類です。

・表示位置を指定したToast

Toastの表示位置を指定することもできます。

Toast toast = Toast.makeText(getApplicationContext(), "toast message.", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
Toast.setGravity()で位置を指定します。
1番目の引数はGravity定数、2、3番目の引数はオフセット値です。
例えば、画面左上ちょっと下に表示したければ setGravity(Gravity.TOP | Gravity.LEFT, 0, 50) とします。

・独自レイアウトのToast

自前で定義したレイアウトのToastです。
ダイアログのときと同様、まずはレイアウトを定義します。


xmlファイルの方はこんな感じです。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/CustomToastRoot"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#60FF6633" >

    <ImageView
        android:id="@+id/ImageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:id="@+id/MessageTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/ImageView"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="18dp"
        android:layout_toRightOf="@+id/ImageView"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>

コードも基本的にはダイアログのときと同じです。
// xmlリソースからViewを生成するために、LayoutInflaterを取得
LayoutInflater inflater = getLayoutInflater();
// xmlリソースからViewを生成
View layout = inflater.inflate(R.layout.custom_toast, (ViewGroup) findViewById(R.id.CustomToastRoot));
// CustomToastのTextViewにメッセージを設定
TextView text = (TextView) layout.findViewById(R.id.MessageTextView);
text.setText("custom toast message.");

// setView()でxmlリソースから生成したViewを設定し、Toastを表示
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.TOP, 0, 180);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

こんな感じのToastになりました。

2013年4月1日月曜日

[Android]ダイアログを表示する。その3。

「いろんな種類のダイアログの表示方法についてまとめてみました。」のその3です。

・独自レイアウトのダイアログ

Androidでは自前で定義したレイアウトのダイアログも作成できます。
まずは、プロジェクトの[res] - [layout]にxmlファイルを追加し、レイアウトを定義します。

Graphical Layoutタブで、以下のようなレイアウトを定義しました。


xmlファイルの方はこんな感じです。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:measureWithLargestChild="false"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/HeaderText"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="10dp"
        android:text="volume control"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <Button
            android:id="@+id/MinusButton"
            style="?android:attr/buttonStyle"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:minWidth="48dip"
            android:text="-" />

        <SeekBar
            android:id="@+id/VolumeSeekBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_weight="0.93" />

        <Button
            android:id="@+id/PlusButton"
            style="?android:attr/buttonStyle"
            android:layout_width="48dp"
            android:layout_height="48dp"
            android:minWidth="48dp"
            android:text="+" />
    </LinearLayout>

</LinearLayout>

上記レイアウトのダイアログを作成するコードは次のようになります。
// ※thisはActivity自身

// xmlリソースからViewを生成するために、LayoutInflaterを取得
LayoutInflater inflater = this.getLayoutInflater();
// xmlリソースからViewを生成
View customDialogView = inflater.inflate(R.layout.custom_dialog, null);

// AlertDialog.Builder.setView()で生成したViewを設定
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(customDialogView)
        .setPositiveButton("Yes", new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }

        })
        .setNegativeButton("No", new OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
// ダイアログを表示
builder.show();

作成されたダイアログはこんな感じになります。


今気づいたんですが、このダイアログでYes/Noっておかしいですね。。