web-dev-qa-db-ja.com

材料設計でアラートダイアログがスタイリングされない

私は自分のアプリにappCompatマテリアルデザインを追加しましたが、アラートダイアログは私の一次色、一次色、アクセント色を使用していないようです。

これが私の基本スタイルです。

<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
    <item name="Android:textColorPrimary">@color/action_bar_gray</item>
</style>

私の理解によれば、ダイアログボタンのテキストもこれらの色を使うべきです。私は自分の理解が間違っているのでしょうか。


Solution:

マークされた答えは私を正しい方向に導いた。

<style name="MaterialNavyTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
    <item name="Android:actionModeBackground">@color/apptheme_color_dark</item>
    <item name="Android:textColorPrimary">@color/action_bar_gray</item>
    <item name="sdlDialogStyle">@style/DialogStyleLight</item>
    <item name="Android:seekBarStyle">@style/SeekBarNavyTheme</item>
</style>

<style name="StyledDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorPrimary">@color/apptheme_color</item>
    <item name="colorPrimaryDark">@color/apptheme_color_dark</item>
    <item name="colorAccent">@color/apptheme_color</item>
</style>
158
Matthew

新しいAppCompat v22.1では、新しい Android.support.v7.app.AlertDialog を使用できます。

このようなコードを使うだけです:

import Android.support.v7.app.AlertDialog

AlertDialog.Builder builder =
       new AlertDialog.Builder(this, R.style.AppCompatAlertDialogStyle);
builder.setTitle("Dialog");
builder.setMessage("Lorem ipsum dolor ....");
builder.setPositiveButton("OK", null);
builder.setNegativeButton("Cancel", null);
builder.show();

そして、このようなスタイルを使います。

<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="colorAccent">#FFCC00</item>
        <item name="Android:textColorPrimary">#FFFFFF</item>
        <item name="Android:background">#5fa3d0</item>
    </style>

それ以外の場合は、現在のテーマで定義できます。

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- your style -->
    <item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
</style>

そしてあなたのコードで:

 import Android.support.v7.app.AlertDialog

    AlertDialog.Builder builder =
           new AlertDialog.Builder(this);

ここでKitKatのAlertDialog: enter image description here

448

ダイアログビルダーを初期化するとき、テーマとして2番目のパラメータを渡します。 APIレベル21の材料設計が自動的に表示されます。

AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_DARK);

または、

AlertDialog.Builder builder = new AlertDialog.Builder(this, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT);
8
Sandeep Kumar

AppCompatはダイアログに対してそれをしません(少なくともまだ)

EDIT:現在はしています。必ずAndroid.support.v7.app.AlertDialogを使用してください

4
nadavfima

あなたが使用することができます

材料設計ライブラリ

材料設計ライブラリは、きれいな警告ダイアログ、ボタン、その他の目的のために作られました。 のようなスナックバーです。現在はかなり開発されています。

ガイド、コード、例 - https://github.com/navasmdc/MaterialDesignLibrary

Android Studio 1.0にライブラリを追加する方法のガイド - どうやって材料設計ライブラリをAndroid Studioにインポートできますか?

ハッピーコーディング;)

2
Inoy

あなたはこのプロジェクトを検討することができます: https://github.com/fengdai/AlertDialogPro

それはあなたにLollipopのものとほとんど同じで重要なテーマ警告ダイアログを提供することができます。 Android 2.1と互換性があります。

2
Feng Dai

このライブラリを試してください。

https://github.com/avast/Android-styled-dialogs

これはDialogFragmentsではなくAlertDialogsに基づいています(@afollestadのもののように)。主な利点:ダイアログはローテーション後も消えませんし、コールバックはまだ機能します。

1
David Vávra

何らかの理由でAndroid:textColorはタイトルの色を更新するだけのようです。を使用してメッセージテキストの色を変更できます。

SpannableString.AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(this, R.style.MyDialogTheme));

AlertDialog dialog = builder.create();
                Spannable wordtoSpan = new SpannableString("I know just how to whisper, And I know just how to cry,I know just where to find the answers");
                wordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 15, 30, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                dialog.setMessage(wordtoSpan);
                dialog.show();
1
CaptRespect