Я борюсь с изменением цвета ТЕКСТА в диалогах AppCompat Dialog.AppCompatDialog: Невозможно изменить цвет текста
Мое приложение использует тему DARK (Theme.AppCompat.NoActionBar
), но для диалогов я хочу тему LIGHT. Я использую Build Tools, Support Library и compileSdkVersion до 25, это имеет значение.
Я могу изменить все остальное в диалоговом окне (название, фон, фон окна) , но не основные и акцентированные текстовые цвета, которые продолжают использовать (белые) настройки для темной темы, в результате чего белые текст на белом фоне.
Я пытался несколько десятков решений в подобных вопросах здесь в SO, как:
1) Простой один: На styles.xml:
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<item name="alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
<item name="android:alertDialogTheme">@style/AppCompatAlertDialogStyle</item>
</style>
<style name="AppCompatAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert">
<!-- ignored !!!! -->
<item name="colorPrimary">#ff0000</item>
<!-- ignored !!!! -->
<item name="colorPrimaryDark">#ff0000</item>
<!-- ignored !!!! -->
<item name="colorAccent">#ff0000</item>
<!-- ignored !!!! -->
<item name="android:textColorPrimary">#F040FF</item>
<!-- ignored !!!! -->
<item name="android:textColor">#F040FF</item>
</style>
С помощью этого решения, то фон и кнопки стиля от AppCompat.Light.Dialog.Alert
ТОРМОЗ, но не цвет текста, как вы можете видеть на скриншоте:
2) вручную с указанием стиля на Creation AlertDialog:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AppCompatAlertDialogStyle);
LayoutInflater inflater = getActivity().getLayoutInflater();
View hostView = mHostView = inflater.inflate(layoutId, null);
Такая же проблема. Светлый фон, Световой текст.
3) Использование ContextWrapper:
ContextThemeWrapper ctw = new ContextThemeWrapper(getActivity(), R.style.AppCompatAlertDialogStyle);
AlertDialog.Builder builder = new AlertDialog.Builder(ctw);
Ничего :(То же самое происходит
4) вручную указав другие экзотические константы я наткнулся на много постов здесь в SO, как
Theme_DeviceDefault_Light_Dialog_Alert
THEME_DEVICE_DEFAULT_LIGHT
Это была отчаянная попытка, но в любом случае текст не изменяется
5) Задание стиля во фрагменте, а не в диалоговом
Dialog_Meta newFragment = new Dialog_Meta();
newFragment.setStyle(DialogFragment.STYLE_NORMAL, R.style.AppCompatAlertDialogStyle);
newFragment.show(fragmentManager, TAG);
я использовал это время раствор назад в очень старой версии API, не могу вспомнить, что была проблема , но в любом случае не решает проблему :(
Может ли кто-нибудь сказать мне, что происходит?
Просто, чтобы быть уверенным: вы используете 'android.support.v7.app.AlertDialog', а не' android.app.AlertDialog', да? –
Спасибо за подсказку. Да, я использую v7.app.AlertDialog! – rupps
О, хорошо, я думаю, что вижу причину. Вы устанавливаете свой собственный 'View' на' AlertDialog', так что тема не будет применяться к этим 'View's. Вы можете комбинировать # 2 и # 3 с манжетой, а вместо 'getActivity() использовать' LayoutInflater.from() 'ContextThemeWrapper'. GetLayoutInflater()'. –