Desain Material tidak menata dialog peringatan

161

Saya telah menambahkan desain material appCompat ke aplikasi saya dan tampaknya dialog peringatan tidak menggunakan warna primer, primer, atau aksen saya.

Inilah gaya dasar saya:

<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>

Berdasarkan pemahaman saya, teks tombol dialog juga harus menggunakan warna-warna ini. Apakah saya salah dalam memahami atau ada sesuatu yang harus saya lakukan?


Larutan:

Jawaban yang ditandai membuat saya berada di jalur yang benar.

<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>
Matius
sumber
Anda dapat mencoba perpustakaan ini yang saya buat: github.com/AndroidDeveloperLB/MaterialStuffLibrary
pengembang android
15
Apakah bagian bawah seharusnya menjadi solusinya? Jika demikian, posting sebagai jawaban sendiri , jangan edit jawaban ke dalam pertanyaan.
Adi Inbar

Jawaban:

463

DIPERBARUI PADA Agustus 2019 DENGAN Komponen bahan untuk pustaka android:

Dengan komponen Material baru untuk perpustakaan Android Anda dapat menggunakan com.google.android.material.dialog.MaterialAlertDialogBuilderkelas baru , yang memanjang dari androidx.appcompat.AlertDialog.Builderkelas yang ada dan memberikan dukungan untuk spesifikasi Desain Material terbaru.

Cukup gunakan sesuatu seperti ini:

new MaterialAlertDialogBuilder(context)
            .setTitle("Dialog")
            .setMessage("Lorem ipsum dolor ....")
            .setPositiveButton("Ok", /* listener = */ null)
            .setNegativeButton("Cancel", /* listener = */ null)
            .show();

Anda dapat menyesuaikan warna yang memperluas ThemeOverlay.MaterialComponents.MaterialAlertDialoggaya:

  <style name="CustomMaterialDialog" parent="@style/ThemeOverlay.MaterialComponents.MaterialAlertDialog">
     <!-- Background Color-->
     <item name="android:background">#006db3</item>
     <!-- Text Color for title and message -->
     <item name="colorOnSurface">@color/secondaryColor</item>
     <!-- Text Color for buttons -->
     <item name="colorPrimary">@color/white</item> 
     ....
  </style>  

Untuk menerapkan gaya khusus Anda, gunakan saja konstruktor:

new MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog)

masukkan deskripsi gambar di sini

Untuk menyesuaikan tombol, judul dan teks isi memeriksa posting ini untuk lebih jelasnya.

Anda juga dapat mengubah gaya secara global dalam tema aplikasi Anda:

 <!-- Base application theme. -->
 <style name="AppTheme" parent="Theme.MaterialComponents.Light">
    ...
    <item name="materialAlertDialogTheme">@style/CustomMaterialDialog</item>
 </style>

DENGAN PERPUSTAKAAN DUKUNGAN dan TEMA APPCOMPAT:

Dengan yang baru AppCompat v22.1Anda dapat menggunakan android.support.v7.app.AlertDialog baru .

Cukup gunakan kode seperti ini:

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();

Dan gunakan gaya seperti ini:

<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>

Kalau tidak, Anda dapat menentukan dalam tema Anda saat ini:

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

dan kemudian dalam kode Anda:

 import android.support.v7.app.AlertDialog

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

Berikut AlertDialog di Kitkat: masukkan deskripsi gambar di sini

Gabriele Mariotti
sumber
2
Mengapa memaksa AlertDialog.Builder menggunakan tema yang tepat alih-alih memperbarui yang default? Saya lebih suka menyelesaikan masalah ini di styles.xml daripada kode Java.
Tomáš Hubálek
2
Font Judul dan Tombol tidak tebal pada perangkat pra-lollipop.
jimmy0251
9
Saya harus menambahkan dengan "android:" untuk membuatnya berfungsi:<item name="android:alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
1
+1 untuk jawaban luar biasa tetapi Bagaimana saya bisa mencapai UI yang sama untuk Versi Android Di Bawah Lollypop ... karena dengan ini di bawah perangkat UI terlihat sangat aneh.
realpranav
1
tambahkan import android.support.v7.app.AlertDialog berfungsi
FlipNovid
9

saat menginisialisasi pembuat dialog, berikan parameter kedua sebagai tema. Ini akan secara otomatis menampilkan desain material dengan API level 21.

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

atau,

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

AppCompat tidak melakukan itu untuk dialog (setidaknya belum)

EDIT: itu sekarang. pastikan untuk digunakanandroid.support.v7.app.AlertDialog

nadavfima
sumber
Sepertinya Anda dapat melakukan beberapa modifikasi pada gaya dialog dengan AppCompat
Matius
Studio Android saya secara default memberi saya import app.AlertDialogbukan appCompat. Saya mencoba mencari tahu apa yang salah selama sekitar 40 menit sebelum saya benar-benar memeriksanya ... Sialan Anda google!
Glorifind
2

Anda dapat mempertimbangkan proyek ini: https://github.com/fengdai/AlertDialogPro

Ini dapat memberikan Anda dialog peringatan tema materi yang hampir sama dengan lollipop. Kompatibel dengan Android 2.1.

Feng Dai
sumber
Hanya sebuah catatan: Jawaban ini lebih tua, lalu yang diterima.
rekire
1

Coba perpustakaan ini:

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

Ini berdasarkan DialogFragmentsbukan AlertDialogs(seperti yang dari @afollestad). Keuntungan utama: Dialog tidak berhenti setelah rotasi dan panggilan balik masih berfungsi.

David Vávra
sumber
Perpustakaan saya jauh lebih mampu. Dan Anda selalu dapat membungkus Dialog dengan DialogFragment. 😛
afollestad
1

Untuk beberapa alasan android: textColor tampaknya hanya memperbarui warna judul. Anda dapat mengubah warna teks pesan dengan menggunakan a

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();
CaptRespect
sumber
0

Dialog peringatan gaya desain Bahan: Font Kustom, Tombol, Warna & bentuk, ..

 MaterialAlertDialogBuilder(requireContext(),
                R.style.MyAlertDialogTheme
            )
                .setIcon(R.drawable.ic_dialogs_24px)
                .setTitle("Feedback")
                //.setView(R.layout.edit_text)
                .setMessage("Do you have any additional comments?")
                .setPositiveButton("Send") { dialog, _ ->

                    val input =
                        (dialog as AlertDialog).findViewById<TextView>(
                            android.R.id.text1
                        )
                    Toast.makeText(context, input!!.text, Toast.LENGTH_LONG).show()

                }
                .setNegativeButton("Cancel") { _, _ ->
                    Toast.makeText(requireContext(), "Clicked cancel", Toast.LENGTH_SHORT).show()
                }
                .show()

Gaya:

  <style name="MyAlertDialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
  
        <item name="android:textAppearanceSmall">@style/MyTextAppearance</item>
        <item name="android:textAppearanceMedium">@style/MyTextAppearance</item>
        <item name="android:textAppearanceLarge">@style/MyTextAppearance</item>

        <item name="buttonBarPositiveButtonStyle">@style/Alert.Button.Positive</item>
        <item name="buttonBarNegativeButtonStyle">@style/Alert.Button.Neutral</item>
        <item name="buttonBarNeutralButtonStyle">@style/Alert.Button.Neutral</item>

        <item name="android:backgroundDimEnabled">true</item>

        <item name="shapeAppearanceOverlay">@style/ShapeAppearanceOverlay.MyApp.Dialog.Rounded
        </item>

    </style>




    <style name="MyTextAppearance" parent="TextAppearance.AppCompat">
        <item name="android:fontFamily">@font/rosarivo</item>
    </style>


        <style name="Alert.Button.Positive" parent="Widget.MaterialComponents.Button.TextButton">
   <!--     <item name="backgroundTint">@color/colorPrimaryDark</item>-->
        <item name="backgroundTint">@android:color/transparent</item>
        <item name="rippleColor">@color/colorAccent</item>
        <item name="android:textColor">@color/colorPrimary</item>
       <!-- <item name="android:textColor">@android:color/white</item>-->
        <item name="android:textSize">14sp</item>
        <item name="android:textAllCaps">false</item>
    </style>


    <style name="Alert.Button.Neutral" parent="Widget.MaterialComponents.Button.TextButton">
        <item name="backgroundTint">@android:color/transparent</item>
        <item name="rippleColor">@color/colorAccent</item>
        <item name="android:textColor">@color/colorPrimary</item>
        <!--<item name="android:textColor">@android:color/darker_gray</item>-->
        <item name="android:textSize">14sp</item>
        <item name="android:textAllCaps">false</item>
    </style>


  <style name="ShapeAppearanceOverlay.MyApp.Dialog.Rounded" parent="">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">8dp</item>
    </style>

Keluaran: masukkan deskripsi gambar di sini

Hari Shankar S
sumber