3

テキストなしでカスタムProgressDialogを作成する方法に関するチュートリアルをたくさん見つけました。カスタム画像とメッセージを使用してカスタムProgressDialogを作成する最も簡単な方法は何ですか。このようなもの...

ここに画像の説明を入力してください

4

1 に答える 1

21

カスタムダイアログの作成

ダイアログのデザインをカスタマイズする場合は、レイアウト要素とウィジェット要素を使用して、ダイアログウィンドウの独自のレイアウトを作成できます。レイアウトを定義したら、ルートViewオブジェクトまたはレイアウトリソースIDをsetContentView(View)に渡します。

たとえば、右に示すダイアログを作成するには、次のようにします。

custom_dialog.xmlとして保存されたXMLレイアウトを作成します。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/layout_root"
              android:orientation="horizontal"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:padding="10dp"
              >
    <ImageView android:id="@+id/image"
               android:layout_width="wrap_content"
               android:layout_height="fill_parent"
               android:layout_marginRight="10dp"
               />
    <TextView android:id="@+id/text"
              android:layout_width="wrap_content"
              android:layout_height="fill_parent"
              android:textColor="#FFF"
              />
</LinearLayout>

このXMLは、LinearLayout内でImageViewとTextViewを定義します。上記のレイアウトをダイアログのコンテンツビューとして設定し、ImageView要素とTextView要素のコンテンツを定義します。

Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);

dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");

TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.android);

ダイアログをインスタンス化した後、setContentView(int)を使用してカスタムレイアウトをダイアログのコンテンツビューとして設定し、レイアウトリソースIDを渡します。ダイアログにレイアウトが定義されたので、findViewById(int)を使用してレイアウトからViewオブジェクトをキャプチャし、それらのコンテンツを変更できます。それでおしまい。これで、「ダイアログの表示」で説明されているようにダイアログを表示できます。基本のDialogクラスで作成されたダイアログには、タイトルが必要です。setTitle()を呼び出さない場合、タイトルに使用されるスペースは空のままですが、表示されたままになります。タイトルがまったく必要ない場合は、AlertDialogクラスを使用してカスタムダイアログを作成する必要があります。ただし、AlertDialogはAlertDialog.Builderクラスを使用して最も簡単に作成されるため、上記で使用したsetContentView(int)メソッドにアクセスすることはできません。代わりに、setView(View)を使用する必要があります。

XMLレイアウトを拡張するには、getLayoutInflater()(またはgetSystemService())を使用してLayoutInflaterを取得してから、inflate(int、ViewGroup)を呼び出します。最初のパラメーターはレイアウトリソースIDで、2番目のパラメーターはルートビューのIDです。この時点で、膨張したレイアウトを使用して、レイアウト内のViewオブジェクトを検索し、ImageView要素とTextView要素のコンテンツを定義できます。次に、AlertDialog.Builderをインスタンス化し、setView(View)を使用してダイアログの拡張レイアウトを設定します。

AlertDialogでカスタムレイアウトを作成する例を次に示します。

AlertDialog.Builder builder;
AlertDialog alertDialog;

Context mContext = getApplicationContext();
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog,
                               (ViewGroup) findViewById(R.id.layout_root));

TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);

builder = new AlertDialog.Builder(mContext);
builder.setView(layout);
alertDialog = builder.create();

カスタムレイアウトにAlertDialogを使用すると、管理ボタン、選択可能なリスト、タイトル、アイコンなどの組み込みのAlertDialog機能を利用できます。

詳細については、DialogクラスとAlertDialog.Builderクラスのリファレンスドキュメントを参照してください。

于 2012-08-24T19:19:26.307 に答える