Проблемы с цветом кнопок в AlertDialog на Oreo 8.0 - PullRequest
0 голосов
/ 07 мая 2018

У меня проблема с кнопками действий в AlertDialogs только на Android Oreo 8.0, обычные AlertDilogs или AlertDialogs в PreferenceFragment , такие как EditTextPreference.

Проблемы появляются во всех всплывающих окнах независимо от типа диалога или библиотеки поддержки

Это EditTextPreference в API 23 отлично работает

Android API 23

Вот Android Oreo 8.0, кнопки скрыты или белые

Android Oreo API 26

Вот мой файл стилей

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowContentTransitions">true</item>
    <item name="android:buttonStyle">@style/RoundedButtons</item>
    <item name="buttonStyle">@style/RoundedButtons</item>
    <item name="android:fontFamily">@font/roboto_regular</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:dialogTheme">@style/DatePickerTheme</item>
</style>

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light">
    <item name="android:background">@drawable/cuju_gradient_background</item>
</style>

<style name="RoundedButtons" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/rounded_gradient_bg</item>
    <item name="android:padding">4dp</item>
    <item name="android:textSize">20sp</item>
    <item name="android:minHeight">48dp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textAllCaps">false</item>
</style>

<style name="HollowButtons" parent="Widget.AppCompat.Button.Borderless.Colored">
    <item name="android:background">@drawable/rounded_hollow_botton</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textAllCaps">false</item>
</style>

<style name="HollowRegisterButtons" parent="Widget.AppCompat.Button.Borderless.Colored">
    <item name="android:background">@drawable/registration_hollow_botton</item>
    <item name="android:minHeight">56dp</item>
    <item name="android:textColor">@color/startColor</item>
    <item name="android:textAllCaps">false</item>
</style>

<style name="HollowButtonsLeaderBoard" parent="Widget.AppCompat.Button.Borderless.Colored">
    <item name="android:background">@drawable/rounded_hollow_leaderboard_botton</item>
    <item name="android:textColor">@color/colorPrimaryDark</item>
    <item name="android:paddingStart">20dp</item>
    <item name="android:paddingLeft">20dp</item>
    <item name="android:paddingEnd">20dp</item>
    <item name="android:paddingRight">20dp</item>
    <item name="android:maxHeight">36dp</item>
    <item name="android:maxButtonHeight">36dp</item>
    <item name="android:textSize">14sp</item>
    <item name="android:textAllCaps">false</item>
</style>


<style name="HollowButtonsTags" parent="Widget.AppCompat.Button.Borderless.Colored">
    <item name="android:background">@drawable/rounded_hollow_tags_button</item>
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textAllCaps">false</item>

</style>

<style name="RegisterRoundedButtons" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/white_rounded_rectangle</item>
    <item name="android:textColor">@android:color/black</item>
    <item name="android:paddingLeft">16dp</item>
    <item name="android:paddingRight">16dp</item>
    <item name="android:paddingStart">16dp</item>
    <item name="android:paddingEnd">16dp</item>
    <item name="android:textAllCaps">false</item>
</style>

<style name="NextButtons" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/next_button</item>
    <item name="android:textColor">#ff4a4a4a</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:textSize">17sp</item>
</style>

<style name="CoachButton" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/white_rounded_rectangle</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:textSize">16sp</item>
</style>

<style name="CoachButtons1" parent="CoachButton">
    <item name="android:background">@drawable/yellow_rounded_rectangle</item>
</style>

<style name="CoachButtons2" parent="CoachButton">
    <item name="android:background">@drawable/green_rounded_rectangle</item>
</style>


<style name="RegisterText" parent="android:TextAppearance">
    <item name="android:textColor">@android:color/white</item>
    <item name="android:textSize">17sp</item>
    <item name="android:gravity">center</item>
    <item name="android:layout_gravity">center</item>
</style>

<style name="RegisterEditText" parent="Widget.AppCompat.EditText">
    <item name="android:textSize">15sp</item>
    <item name="android:background">@drawable/registration_edittext_selector</item>
    <item name="android:minHeight">56dp</item>
    <item name="android:paddingLeft">30dp</item>
    <item name="android:paddingRight">16dp</item>
    <item name="android:paddingTop">4dp</item>
    <item name="android:paddingBottom">4dp</item>
    <item name="android:textColor">@android:color/black</item>
    <item name="android:textColorHint">#FF9B9B9B</item>
</style>

<style name="cujuEditText" parent="Widget.AppCompat.EditText">
    <item name="android:textSize">15sp</item>
    <item name="android:background">@drawable/rounded_edittext</item>
    <item name="android:minHeight">48dp</item>
    <item name="android:paddingLeft">16dp</item>
    <item name="android:textColorHint">#8F8F8F</item>
    <item name="android:paddingRight">16dp</item>
    <item name="android:paddingTop">4dp</item>
    <item name="android:paddingBottom">4dp</item>
</style>

<style name="homeEditText" parent="Widget.AppCompat.EditText">
    <item name="android:textSize">15sp</item>
    <item name="android:background">@drawable/status_field</item>
    <item name="android:minHeight">48dp</item>
    <item name="android:paddingLeft">16dp</item>
    <item name="android:textColorHint">@color/black</item>
    <item name="android:paddingRight">16dp</item>
    <item name="android:paddingTop">4dp</item>
    <item name="android:paddingBottom">4dp</item>
</style>

<style name="RegisterAutoCompleteTextView" parent="Widget.AppCompat.AutoCompleteTextView">
    <item name="android:textSize">15sp</item>
    <item name="android:background">@drawable/registration_edittext_selector</item>
    <item name="android:minHeight">56dp</item>
    <item name="android:paddingLeft">30dp</item>
    <item name="android:paddingRight">16dp</item>
    <item name="android:paddingTop">4dp</item>
    <item name="android:paddingBottom">4dp</item>
    <item name="android:textColor">@android:color/black</item>
    <item name="android:textColorHint">#FF9B9B9B</item>
</style>

<style name="SeekBar" parent="Widget.AppCompat.SeekBar">
    <item name="android:thumb">@drawable/hype_cujuball</item>
    <item name="android:height">2dp</item>
    <item name="android:progressDrawable">@drawable/cuju_custom_seekbar</item>
    <item name="android:indeterminateOnly">false</item>
    <item name="android:splitTrack">false</item>
</style>

<style name="Spinner" parent="Widget.AppCompat.DropDownItem.Spinner">

</style>

<style name="my_facebook" parent="com_facebook_loginview_default_style">
    <item name="android:background">@drawable/facebook_rounded_botton</item>
    <item name="android:paddingBottom">16dp</item>
    <item name="android:paddingTop">16dp</item>
    <item name="android:textColor">@android:color/black</item>
    <item name="android:textSize">18sp</item>
</style>

<style name="Theme.AppCompat.Light.NoActionBar.FullScreen" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

<style name="DatePickerTheme" parent="Theme.AppCompat.Light.Dialog">
    <item name="colorControlActivated">@color/colorPrimary</item>
    <item name="colorControlHighlight">@color/colorPrimary</item>
</style>

Что мне написать в стилях, чтобы решить проблему?

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Я нашел решение.

Оказывается, кнопка в AlertDialog в Android Oreo и более поздних версиях расширяет стиль кнопки по сравнению со стилем кнопок по умолчанию в приложении.

<item name="buttonStyle">@style/RoundedButtons</item>

<style name="RoundedButtons" parent="Widget.AppCompat.Button">
    <item name="android:background">@drawable/rounded_gradient_bg</item>
    <item name="android:padding">4dp</item>
    <item name="android:textSize">20sp</item>
    <item name="android:minHeight">48dp</item>
    <item name="android:textColor">@color/white</item>
    <item name="android:textAllCaps">false</item>
</style>

Итак, когда я удалил эту строку

<item name="android:textColor">@color/white</item>

это работает.

0 голосов
/ 07 мая 2018

Я знаю, что это не тот ответ, который вам нужен, но, как я однажды пытался адаптировать стиль диалогового окна системных предупреждений, я действительно устал пытаться адаптировать стили так, как я хотел, для моего приложения, только для случая, когда вы устали от поиска решения, подумайте над написанием своего настраиваемого диалогового окна оповещения и просто сделайте полный макет самостоятельно: -)

Вот пример простого заголовка, сообщения и двухкнопочного диалога, который вы можете адаптировать (в этом примере используется привязка данных):

public class StyledAlertDialog {

    public static class Builder {
        private Context context;
        private String title;
        private String message;
        private int resPositiveButton;
        private DialogInterface.OnClickListener positiveListener;
        private int resNegativeButton;
        private DialogInterface.OnClickListener negativeListener;
        private boolean cancelable = true;

        public Builder(Context context) {
            this.context = context;
            // default value for cancel button
            this.resNegativeButton = R.string.button_cancel;
        }

        public Builder setTitle(int resTitle) {
            this.title = context.getString(resTitle);
            return this;
        }

        public Builder setTitle(String title) {
            this.title = title;
            return this;
        }

        public Builder setMessage(int resMessage) {
            this.message = context.getString(resMessage);
            return this;
        }

        public Builder setMessage(String message) {
            this.message = message;
            return this;
        }

        public Builder setPositiveButton(int resPositiveButton, DialogInterface.OnClickListener positiveListener) {
            this.resPositiveButton = resPositiveButton;
            this.positiveListener = positiveListener;
            return this;
        }

        public Builder setNegativeButton(int resNegativeButton, DialogInterface.OnClickListener negativeListener) {
            this.resNegativeButton = resNegativeButton;
            this.negativeListener = negativeListener;
            return this;
        }

        public Builder create() {
            return this;
        }

        public void setCancelable(boolean cancelable) {
            this.cancelable = cancelable;
        }

        public void show() {
            final AlertDialog alertDialog = new AlertDialog.Builder(context).create();

            LayoutInflater inflater = LayoutInflater.from(context);
            // In this special case null is the only valid choice as the root
            // of the alertDialog does not exist yet.
            View inflatedView = inflater.inflate(R.layout.dialog_styled_layout, null);
            DialogStyledLayoutBinding viewBinding = DialogStyledLayoutBinding.bind(inflatedView);

            if (title != null && title.length() > 0) {
                viewBinding.customDialogTitle.setText(title);
                viewBinding.customDialogTitle.setVisibility(View.VISIBLE);
            } else {
                viewBinding.customDialogTitle.setVisibility(View.GONE);
            }

            viewBinding.customDialogMessage.setText(message);

            viewBinding.customPositiveButton.setText(resPositiveButton);
            viewBinding.customPositiveButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alertDialog.hide();
                    if (positiveListener != null) {
                        positiveListener.onClick(alertDialog, 0);
                    }
                }
            });
            viewBinding.customNegativeButton.setText(resNegativeButton);
            viewBinding.customNegativeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    alertDialog.hide();
                    if (negativeListener != null) {
                        negativeListener.onClick(alertDialog, 0);
                    }
                }
            });

            alertDialog.setCancelable(cancelable);
            alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            alertDialog.setView(inflatedView, 40, 0, 40, 0);
            alertDialog.show();
        }
    }
}
...