8

したがって、グレーと白 (逆に設定した場合...) の背景色を使用してアラート ダイアログを表示できることがわかりました。

SDKのthemes.xmlをチェックした理由を知るために、それをチェックすると、ドローアブルに導かれ、アラートダイアログの背景がプログラムではなく、いくつかの画像を介して行われることに気付きました。そして、これらの画像は、LayoutInflater を使用して別の背景色を設定するときに、ダイアログの上部 (タイトル領域) と下部 (ボタン領域のすぐ上) に 2 つの灰色 (または反転色の場合は白) の水平線があることを保証します。

私の質問は、LayoutInflator は役に立たず、alertdialog をサブクラス化する必要があると推測しているため、別の背景色で AlertDialog を生成するにはどうすればよいでしょうか? 何をオーバーライドする必要がありますか?

4

3 に答える 3

17

AlertDialog を使用する代わりに、Dialog を使用することになりました。カスタムの外観を得るには:

1-ダイアログを作成し、タイトル領域を削除します(そうしないと、上部に空白の灰色の領域が表示されます):

myDialog = new Dialog(this);
myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

2-xml でレイアウトを設計し、ダイアログのコンテンツとして設定します。

myDialog.setContentView(R.layout.mydialog_layout);

3-レイアウトが丸みを帯びた四角形でない場合、ダイアログ ボックスの丸みを帯びた角と交差します。したがって、レイアウトを丸みを帯びた四角形として設計します。

mydialog_layout.xml で:

android:background = "@layout/mydialog_shape"

mydialog_shape.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle" 
     > 
     <gradient android:startColor="#FF0E2E57" 
     android:endColor="#FF0E2E57" 
            android:angle="225" android:paddingLeft="20dip"/> 

    <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp" 
     android:topLeftRadius="5dp" android:topRightRadius="5dp" android:paddingLeft="20dip"/> 
</shape>

4-アクティビティのボタンにリスナーを追加します。

Button button = (Button)myDialog.findViewById(R.id.dialogcancelbutton);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    myDialog.cancel();
}});

それはそれについてです。

于 2010-11-02T12:12:27.480 に答える
0

すべての Android ダイアログが同じように作成されているわけではないことを読んだことを思い出します。したがって、デバイスの Android バージョンに付属しているダイアログを使用したくない場合は、次のようにします。完全に新しいダイアログをゼロからコーディングする必要があります。

編集:

onCreateDialog をカスタム ダイアログ ビルダー クラスでオーバーライドする必要があると思います。おっしゃる通り、やったことはありません。Android MVC スタイルを維持するには、ダイアログも XML で定義する必要があることに注意してください。私がそれをするつもりだったら; おそらく、XML レイアウトから始めて、通常のダイアログ ビルダー クラスと同じメソッドを使用してカスタム ダイアログ クラスをコーディングします。あいまいで申し訳ありませんが、私はまだ Java と Android を学んでいます。

于 2010-10-23T06:26:28.320 に答える