Стилизация фрагмента пользовательского диалога не работает

Я пытаюсь стилизовать все фрагменты диалога, чтобы они выглядели одинаково в моем приложении. Диалоги, исходящие из моего фрагмента настроек, оформлены именно так, как я этого хочу. Для моих пользовательских фрагментов диалога стиль похож, но не совсем такой же. По какой-то причине виджеты spinner, timepicker, datepicker, radiobuttons и edittext внутри моих пользовательских фрагментов диалога не соответствуют одному стилю. На самом деле виджеты сливаются с белым фоном и их не видно. Что я делаю не так?

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"/>

<style name="Theme.Base" parent="AppTheme">
    <item name="colorPrimary">@color/PrimaryBackgroundColor</item>
    <item name="colorPrimaryDark">@color/SecondaryBackgroundColor</item>
    <item name="colorAccent">@color/ColorBackgroundAccent</item>
    <item name="android:textColorPrimary">@color/PrimaryTextColor</item>
    <item name="android:alertDialogTheme">@style/AppTheme.DialogStyle</item>
</style>
    <style name="AppTheme.DialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColorPrimary">@color/PrimaryBackgroundColor</item>
    <item name="colorAccent">@color/ColorBackgroundAccent</item>
</style>

Я применяю тему к моему пользовательскому фрагменту диалога следующим образом:

 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_DialogStyle);

Мой диалог настроек выглядит так (именно так, как я хочу):

Фрагмент диалогового окна настроек

Фрагмент моего пользовательского диалога выглядит так:

Фрагмент пользовательского диалогового окна

Как видите, радиокнопка выбрала красный цвет, и вы не можете видеть невыбранную радиокнопку.


person TrackDave    schedule 25.09.2015    source источник
comment
Оба предоставленных вами снимка экрана выглядят одинаково, за исключением цвета акцента переключателя. Что именно вы хотите изменить в пользовательском диалоге?   -  person jaibatrik    schedule 25.09.2015
comment
Я хочу, чтобы цвет переключателей совпадал, а также мой другой фрагмент диалога с указателем времени, указателем даты и счетчиком по какой-то причине смешивается с фоном, поэтому пользователь не сможет их увидеть.   -  person TrackDave    schedule 25.09.2015
comment
Проверьте этот URL-адрес ссылка. Красные прямоугольники — это место, где находятся счетчик, средство выбора даты и средство выбора времени.   -  person TrackDave    schedule 25.09.2015


Ответы (4)


Наконец-то получил ответ!!!

Это проблема или ошибка в AppCompat 22+. Перейти по ссылке

По-видимому, это была ошибка с фрагментами, и виджеты не получали материал, оформленный в виде фрагмента. Кажется, они исправили эту проблему, но проблема все еще сохраняется во фрагменте диалога, основанном на том, через что я прохожу. Проблема возникает, когда вы используете экземпляр инфлятора, переданный Fragment#onCreateView(). Обходной путь на данный момент заключается в том, чтобы вместо этого использовать LayoutInflater из getActivity().getLayoutInflater() в соответствии с Google.

Поэтому я изменил свой код на:

View view = getActivity().getLayoutInflater().inflate(R.layout.dialog, null);

от:

View view = LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.dialoge, null);

Все мои виджеты теперь тематические. Спасибо всем. Надеюсь, это поможет кому-то другому.

person TrackDave    schedule 25.09.2015
comment
тьфу ... не могу поверить, что это до сих пор не исправлено в библиотеках поддержки 23.4.0 :-( - person kenyee; 01.08.2016
comment
Я собираюсь распечатать этот вопрос и ответить на него и оклеить им свою комнату. Спасибо, что вернулись! Я рад, что нашел это через час, а не через три дня... - person oli.G; 06.04.2017
comment
Проблема все еще не устранена, и указанный вами обходной путь сработал. Хотя я бы предложил использовать инфлятор напрямую из Activity вместо использования инфлятора для приложений. - person muthuraj; 08.06.2020

Я считаю, что вам нужно установить тему в реальном диалоге, а не во фрагменте.

Используйте этот конструктор для создания AlertDialog:

AlertDialog.Builder(Context context, int theme)

ie

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), theme)
person Kassisdion    schedule 25.09.2015
comment
Флориан, это именно то, что у меня есть в моем посте AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppTheme_DialogStyle); - person TrackDave; 25.09.2015
comment
Я столкнулся с той же проблемой, когда пытался создать собственный диалог с рейтингом. (если я хорошо помню, что в диалоговом окне есть что-то особенное, и, возможно, вам придется настроить рейтинговую панель, я проверю это) - person Kassisdion; 25.09.2015
comment
Большое спасибо. Дай мне знать. - person TrackDave; 25.09.2015

Я думаю, вам нужно добавить еще один элемент в стиль вашего диалога. android:textColorSecondary покажет цвет невыбранного флажка.

в вашем стиле добавить его.

</style>
    <style name="AppTheme.DialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:textColorPrimary">@color/PrimaryBackgroundColor</item>
    <item name="colorAccent">@color/ColorBackgroundAccent</item>
     <item name="android:textColorSecondary">#000000</item>
</style>

Это сделает флажок «Отмечено» или переключит цвет края кнопки на черный. вам нужно изменить #000000 на цвет, который вы хотите показать.

person Shvet    schedule 25.09.2015
comment
попробуйте добавить его в AppTheme и проверьте. - person Shvet; 25.09.2015
comment
Не хорошо. Кажется, что ничего в моей теме приложения не применяется ни к одному из виджетов в моем пользовательском фрагменте диалога. - person TrackDave; 25.09.2015

Посмотрите, поможет ли это - Android appcompat-v7:21.0.0 изменить цвет флажка материала

Короче говоря, попробуйте установить android:textColorSecondary.

person headuck    schedule 25.09.2015
comment
Я пробовал это. Я поместил это в свою тему диалога и тему приложения, но это не сработало. Кажется, что мой appTheme не применяется ни к каким виджетам в моем пользовательском фрагменте диалога. - person TrackDave; 25.09.2015
comment
Как насчет android:textColorSecondaryInverse? - person headuck; 25.09.2015
comment
К сожалению ничего :( - person TrackDave; 25.09.2015
comment
На всякий случай, вы используете appcompat 22.1 или более позднюю версию и импортируете из android.support.v7.app.AlertDialog? - person headuck; 25.09.2015
comment
com.android.support:appcompat-v7:23.0.1 и да, я импортирую из v7 - person TrackDave; 25.09.2015
comment
Возможно, вы можете попытать счастья с ответом neoteknic stackoverflow.com/questions/29797134/ (используйте xml, а не второй параметр для стиля диалога)? - person headuck; 25.09.2015
comment
Я думаю, поскольку я использую настраиваемое представление для своего фрагмента диалога, мне может потребоваться стилизовать каждый из виджетов внутри макета. Спасибо за помощь :) - person TrackDave; 25.09.2015