Materyal Tasarımı uyarı iletişim kutularını şekillendirmiyor


161

AppCompat malzeme tasarımını uygulamama ekledim ve uyarı iletişim kutularında birincil, birincilDark veya vurgu renklerim kullanılmıyor.

İşte benim temel tarzı:

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

Anladığım kadarıyla diyaloglar düğmesi metni de bu renkleri kullanmalıdır. Anlayışımda yanlış mıyım yoksa daha yapmam gereken bir şey var mı?


Çözüm:

İşaretli cevap beni doğru yola soktu.

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

Yaptığım bu kütüphaneyi deneyebilirsiniz: github.com/AndroidDeveloperLB/MaterialStuffLibrary
android geliştirici

15
Alt kısım çözüm olmalı mı? Öyleyse, kendi kendine yanıt olarak gönderin , yanıtı soruya düzenlemeyin.
Adi Inbar

Yanıtlar:


463

Android kütüphanesi için malzeme bileşenleri:

Android kütüphanesi için yeni Material bileşenlericom.google.android.material.dialog.MaterialAlertDialogBuilder ile mevcut androidx.appcompat.AlertDialog.Buildersınıftan genişleyen ve en son Material Design spesifikasyonları için destek sağlayan yeni sınıfı kullanabilirsiniz .

Sadece böyle bir şey kullanın:

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

ThemeOverlay.MaterialComponents.MaterialAlertDialogStili uzatan renkleri özelleştirebilirsiniz :

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

Özel stilinizi uygulamak için sadece yapıcıyı kullanın:

new MaterialAlertDialogBuilder(context, R.style.CustomMaterialDialog)

resim açıklamasını buraya girin

İçin düğmeleri özelleştirmek, başlık ve gövde metni bu yayını kontrol daha fazla ayrıntı için.

Ayrıca , uygulama temanızdaki stili global olarak da değiştirebilirsiniz :

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

DESTEK KÜTÜPHANESİ ve APPCOMPAT TEMASI İLE:

Yeni ile AppCompat v22.1yeni android.support.v7.app.AlertDialog kullanabilirsiniz .

Sadece şöyle bir kod kullanın:

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

Ve böyle bir stil kullanın:

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

Aksi takdirde mevcut temanızda tanımlayabilirsiniz:

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

ve daha sonra kodunuzda:

 import android.support.v7.app.AlertDialog

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

Kitkat'teki AlertDialog: resim açıklamasını buraya girin


2
Neden AlertDialog.Builder'ı varsayılan temayı güncellemek yerine tam temayı kullanmaya zorlasın? Bu sorunu Java kodu yerine styles.xml'de çözmeyi tercih ederim.
Tomáš Hubálek

2
Başlık ve Düğmeler yazı tipleri lolipop öncesi cihazlarda kalın değildir.
jimmy0251

9
Çalışmak için "android:" ile başa çıkmak zorunda kaldı:<item name="android:alertDialogTheme">@style/AppCompatAlertDialogStyle</item>

1
Mükemmel cevap için +1 ama Android Sürümü için aynı UI'yi nasıl elde edebilirim Lollypop'un altında ... çünkü aşağıdaki cihazda UI çok garip görünüyor.
realpranav

1
add import android.support.v7.app.AlertDialog çalışıyor
FlipNovid

9

iletişim kutusu oluşturucuyu başlatırken, tema olarak ikinci parametreyi iletin. API düzeyi 21 ile malzeme tasarımını otomatik olarak gösterecektir.

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

veya,

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

4

AppCompat bunu diyaloglar için yapmaz (en azından henüz değil)

EDIT: şimdi. kullandığınızdan emin olunandroid.support.v7.app.AlertDialog


AppCompat ile diyalog stillerinde bazı değişiklikler yapabileceğiniz anlaşılıyor
Matthew

Android import app.AlertDialogStudio'm varsayılan olarak bana appCompat'ı değil. Aslında kontrol etmeden önce yaklaşık 40 dakika boyunca neyin yanlış olduğunu anlamaya çalıştım ... Lanet olsun google!
Glorifind



1

Bu kütüphaneyi deneyin:

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

Bunun DialogFragmentsyerine dayanır AlertDialogs(@afollestad'ınki gibi). Ana avantajı: İletişim kutuları döndürme işleminden sonra kapanmaz ve geri aramalar hala çalışır.


Kütüphanem çok daha yetenekli. Ve her zaman bir Dialog'u bir DialogFragment ile sarabilirsiniz. 😛
afollestad

1

Herhangi bir nedenle android: textColor sadece başlık rengini güncelliyor gibi görünüyor. Mesaj metninin rengini

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

0

Materyal Tasarımı stil uyarı iletişim kutuları: Özel Yazı Tipi, Düğme, Renk ve şekil, ..

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

Stil:

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

Çıktı: resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.