66

ポップアップ ダイアログを表示する Android コードを作成しましたが、背景色を black から white に変更してから、書き込みの色を変更したいと考えています。

これはダイアログのコードです:

mPrefs = PreferenceManager.getDefaultSharedPreferences(this);

    Boolean welcomeScreenShown = mPrefs.getBoolean(welcomeScreenShownPref, false);

    if (!welcomeScreenShown) {


        String whatsNewText = getResources().getString(R.string.Text);
        new AlertDialog.Builder(this).setMessage(whatsNewText).setPositiveButton(
                R.string.ok, new DialogInterface.OnClickListener(){
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        }).show();
        SharedPreferences.Editor editor = mPrefs.edit();
        editor.putBoolean(welcomeScreenShownPref, true);
        editor.commit(); // Very important to save the preference
    }
4

10 に答える 10

115

@DaneWhite の回答を拡張するには、組み込みのテーマに頼る必要はありません。独自のスタイルを簡単に指定できます。

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:background">@color/myColor</item>
</style>

それを Builder コンストラクターに適用します。

ジャワ:

AlertDialog alertDialog = new AlertDialog.Builder(getContext(), R.style.MyDialogTheme)
        ...
        .create();

コトリン:

var alertDialog = AlertDialog.Builder(context, R.style.MyDialogTheme)
        ...
        .create()

これは、使用しているかどうかに関係なく機能するはずandroid.support.v7.app.AlertDialogですandroid.app.AlertDialog

ダイアログのサイズを変更しないため、これは@DummyDataの回答よりもうまく機能します。ウィンドウのバックグラウンド ドローアブルを設定すると、既存の寸法情報の一部が上書きされ、標準幅ではないダイアログが表示されます。

テーマに背景を設定し、ダイアログにテーマを設定すると、希望どおりに色付けされていても正しい幅のダイアログが表示されます。

于 2016-05-24T20:09:03.883 に答える
65

明るいテーマだけが必要で、特定の色にこだわらない場合は、テーマ ID を AlertDialog.Builder コンストラクターに渡すことができます。

AlertDialog.Builder(this, AlertDialog.THEME_HOLO_LIGHT)...

また

AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT)...
于 2013-08-21T03:41:44.490 に答える
3

カスタム alertDialog を作成し、xml レイアウトを使用できます。レイアウトでは、背景色と文字色を設定できます。

このようなもの:

Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar);
LayoutInflater inflater = (LayoutInflater)ActivityName.this.getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_layout,(ViewGroup)findViewById(R.id.layout_root));
dialog.setContentView(view);
于 2013-08-21T00:22:42.233 に答える
-2

アラート ダイアログ ビルダーで使用setInverseBackgroundForced(true)して、背景を反転します。

于 2013-08-21T00:21:36.570 に答える