我想让我的应用程序的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的屏幕截图。
答案 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() {
}
}
}