Я хочу, чтобы окно AlertDialog для моего приложения выглядело так же, как на Android> 6.0.0 (как показано на следующих снимках экрана) для всех более ранних версий Android до 4.4.4. Я применил собственный стиль для диалогового окна.
Ниже приведен стиль в файле styles.xml для AlertDialog:
<style
name = "AlertDialogCustom" parent = "ThemeOverlay.AppCompat.Dialog.Alert">
<item name = "android:textColor">@color/blue</item>
<item name = "android:textColorSecondary">@color/white</item>
<item name = "android:textColorPrimary">@color/white</item>
<item name = "android:background">@color/dark_grey</item>
<item name = "android:backgroundDimAmount">0.3</item>
</style>
Ниже показано, как я применил стиль в java:
new AlertDialog.Builder(new ContextThemeWrapper(context, R.style.AlertDialogCustom))
.setMessage("Why is DialogBox Style Inconsistent through different android versions?")
// Specifying a listener allows you to take an action before dismissing the dialog.
// The dialog is automatically dismissed when a dialog button is clicked.
.setPositiveButton("Yes", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
//Do Something
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int which)
{
//Do Something
}
})
.show();
В качестве обхода мне удалось хотя бы изменить цвет текста на белый на темном фоне, используя:
if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1)
style = android.R.style.Theme_Material_Dialog;
else
style = R.style.AlertDialogCustom;
До сих пор я пытался создает отдельный стиль для более низкой версии Android и применяет их через java, определяя версию Android. Но я не могу воспроизвести стиль окна AlertDialog на Android 6+ в более ранних версиях Android до 4.4.4. И я не могу найти решение в Интернете.
Однако есть аномалия; если я применю свой собственный стиль к Оценить это приложение, предоставленное кобакей, результирующее диалоговое окно RateThisApp будет выглядеть одинаково во всех версиях Android. Поэтому я считаю, что стилизация AlertDialog определенным образом должна решить проблему.
Это то, что я хочу - сделать окно AlertDialog на Android 4.4.4 и 5.1.0 похожим на окно Android 6.0.0 и выше, используя подходящие стили. И почему атрибуты textColor и textColorPrimary не применяются в более ранних версиях Android?
Если ресурса, указанного в моем вопросе, недостаточно, сообщите мне об этом в комментарии, и я поделюсь более подробной информацией.
Вот скриншоты окна AlertDialog на разных версиях Android с применением одного и того же стиля.
Ах! Единственное, что я пропустил, я попробую и сообщу, решит ли это мою проблему.
Но просто для любопытства, почему возникает упомянутая проблема?
Я думаю, это должно быть из-за светлой/темной темы, которая устанавливает цвет шрифта в соответствии с
Странно, потому что я явно объявил параметр textColor.
да, я знаю... Иногда это случалось со мной, и я не знаю, почему. Я предполагаю, что «ThemeOverlay.AppCompat.Dialog.Alert» не указывает темный или светлый, и это может быть проблемой. Вот почему я рассказал вам о пользовательском макете, потому что вы можете установить цвет TextView прямо там и не беспокоиться о цветовой схеме
Сделал как вы посоветовали спасибо. Вы бы получили +15, если бы ответили на вопрос xD. Спасибо кстати.
Я рад, что был полезен!
Для большей гибкости вы можете просто создать свой собственный диалоговый класс с пользовательским макетом. Это даст вам лучший контроль над тем, как выглядит макет.
Вы можете создать очень сложный пользовательский интерфейс в своем диалоговом окне, не написав кучу кода.
Вы можете просто вызвать свой диалог следующим образом:
CustomDialog customDialog = new CustomDialog();
customDialog.show();
Вот пример:
public class CustomDialog extends Dialog {
private ImageView imageView;
private Context dialogContext;
public CustomDialog (@NonNull Context context) {
super(context);
setContentView(R.layout.full_size_image_dialog); .. //your layout
dialogContext = context;
imageView = findViewById(R.id.full_size_image); //controll your views (use any view, the image view is only an example)
}
public void someMethod() {
}
}
}
Спасибо, я разработал собственный макет диалогового окна, который смог воспроизвести внешний вид диалогового окна в более ранних версиях Android. Но есть идеи, почему атрибут textColor (и другие) не применялся к более ранним версиям Android?
Я думаю, что это связано с самим устройством, хотя не уверен.
Нет, я тестировал его на разных устройствах под управлением Android.
Почему бы не создать собственный макет для AlertDialog, а затем расширить его при создании диалогового окна?