将类似外观的样式应用于不同的Android版本的AlertDialog框

时间:2019-06-13 13:03:24

标签: android android-layout android-alertdialog android-styles

我想让我的应用程序的AlertDialog对话框看起来像所有Android 4.6.0之前的较低版本的Android> 6.0.0(如以下屏幕截图所示)。我已经为对话框应用了自定义样式。

以下是AlertDialog的styles.xml中的样式:

Create table

以下是我在Java中应用样式的方法:

<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>

为了解决这个问题,我设法至少使用以下方法将深色背景上的文本颜色更改为白色:

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();

到目前为止,我已经尝试为较低的Android版本制作单独的样式,并通过检测Android版本通过Java应用它们。但是,我无法在4.6.4之前的较低Android版本上复制Android 6+上的AlertDialog框的样式。而且我无法在互联网上找到解决方案。

虽然有异常;如果我在kobakei提供的“为此应用评分”上应用自定义样式,则在所有android版本上出现的RateThisApp对话框都相同。因此,我认为以特定方式设置AlertDialog应该可以解决该问题。

这就是我想要的-通过使用适当的样式,使Android 4.4.4和5.1.0上的AlertDialog框看起来像Android 6.0.0及更高版本中的那个。为什么textColor和textColorPrimary属性没有应用到较低的android版本?

如果我的问题中提供的资源不足,请在评论中让我知道,我将分享更多详细信息。

这是在不同Android版本上应用相同样式的AlertDialog的屏幕截图。

  • Android> = 6.0.0

enter image description here

  • Android = 5.1.0

enter image description here

  • Android 4.4.4

enter image description here

1 个答案:

答案 0 :(得分:1)

为获得更大的灵活性,您可以仅使用自定义布局创建自定义对话框类。 这将使您更好地控制布局的外观。

  • 您可以在对话框中创建非常复杂的UI,而无需编写大量代码

  • 您可以像这样简单地调用对话框:

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() {
}     

  }
}