Хитрость в том, что контекст связан с темой. Эта тема определяет все виды вещей, такие как цвета текста по умолчанию и т. Д.
Раньше у «Сотовых диалогов» всегда была одна и та же тема, независимо от того, были ли они созданы из темных или светлых тем, и, за исключением списков, диалоги были темным фоном, светлым передним планом. В «Соте» и более поздних версиях диалоги имеют разные темы, определяемые активностью, которая их порождает.
При накачивании содержимого в диалоге всегда используйте контекст, возвращаемый методом Dialog#getContext()
, вместо действия, которое породило диалог. Вместо строки кода, которую вы используете, чтобы получить LayoutInflater
выше, попробуйте:
LayoutInflater inflater = LayoutInflater.from(getContext());
Edit: похоже, что вы используете AlertDialog.Builder вместо диалога. AlertDialog.Builder для этой цели добавил метод getContext()
в API 11 (Android 3.0, a.k.a. Honeycomb), но до этого его не было. Вы можете создать свой собственный тематический контекст с ContextThemeWrapper
для старых устройств. Просто убедитесь, что вы никогда не пытаетесь вызвать этот метод на более старой версии платформы. Вы можете защитить его с помощью простой проверки:
Context themedContext;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
themedContext = getContext();
} else {
themedContext = new ContextThemeWrapper(activity, android.R.style.Theme_Dialog);
}
LayoutInflater inflater = LayoutInflater.from(themedContext);