对话框不显示正面和负面的button

我用AlertDialog来提醒用户确认删除。 我检查我的设备(Android 5.1),并performance出色

在这里输入图像说明

但在另一个设备上(也运行Android 5.1),对话框错过了正面和负面的button。

在这里输入图像说明

我检查,发现设备发生这个问题有一个中等分辨率(960×540,854×480)。

决议是否涉及这个问题? 如果没有,你能告诉我这个问题的原因和解决方法吗?

我的代码显示对话框:

public static final Dialog yesNoDialog(Context context, String message, DialogInterface.OnClickListener yesAction, DialogInterface.OnClickListener noAction) { AlertDialog.Builder builder = new AlertDialog.Builder(context,R.style.todoDialogLight); builder.setTitle(context.getString(R.string.app_name)) .setMessage(message) .setCancelable(false) .setPositiveButton("YES", yesAction) .setNegativeButton("NO", noAction); return builder.create(); } 

和styles.xml

  <style name="todoDialogLight" parent="Theme.AppCompat.Light.Dialog"> <!-- Used for the buttons --> <item name="colorAccent">@color/colorPrimaryDark</item> <item name="android:textStyle">bold</item> <!-- Used for the title and text --> <item name="android:textColorPrimary">@color/colorText</item> <!-- Used for the background --> <!-- <item name="android:background">#4CAF50</item>--> <item name="android:fontFamily">sans-serif</item> <item name="android:windowAnimationStyle">@style/RemindDialogAnimation</item> <item name="android:layout_width">@dimen/width_remind_dialog</item> <item name="android:layout_height">wrap_content</item> </style> 

Solutions Collecting From Web of "对话框不显示正面和负面的button"

所以button在那里给我。 不幸的是,他们是在白色背景上的白色文字。 这与决议没有任何关系,但更多的是与你select的主题有关。 要解决这个问题,你需要在对话框主题中设置正确的文字颜色。

例如,在styles.xml中添加

 <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="colorPrimary">@color/colorPrimaryDarkBlue</item> </style> 

并在你的活动中添加

 AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MyActivity.this, R.style.MyDialogTheme); 

希望这可以帮助。

阿里的解决scheme为我工作。 我原来的代码工作在以前的Android版本<7。 但在我的像素testing给了看不见的button。 我添加了阿里详细的风格概念,如下所示,一切都很好:

  return new AlertDialog.Builder(getActivity(),R.style.MyDialogTheme) .setView(v) .setTitle(R.string.filter_picker_title) .setPositiveButton(android.R.string.ok, // when the user presses the button to select a new number new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Integer markerIndex = mNumberPicker.getValue(); stringFilter=uniqueValues[markerIndex]; sendResult(Activity.RESULT_OK, stringFilter); } }) .create(); 

将其添加到style.xml中:

 <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:textColor">@color/colorAccent</item> </style> 

并在活动中使用

 AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(MyActivity.this, R.style.MyDialogTheme); 

这实际上与解决scheme有关,我不知道确切的原因,只是为了解决这个问题。

 public static String getDensity(Context context) { float density = context.getResources().getDisplayMetrics().density; if (density >= 4.0) { return "xxxhdpi"; } if (density >= 3.0) { return "xxhdpi"; } if (density >= 2.0) { return "xhdpi"; } if (density >= 1.5) { return "hdpi"; } if (density >= 1.0) { return "mdpi"; } return "ldpi"; } 

AlertDialog

  public static Dialog yesNoDialog(final Context context, final String message, final DialogInterface.OnClickListener yesAction, final DialogInterface.OnClickListener noAction) { int theme = PreferenceUtil.getThemeSetting(context, PreferenceUtil.PREF_THEME); AlertDialog.Builder builder = null; String density = AppUtil.getDensity(context); if (theme == ThemeUtil.THEME_LIGHT) { if(density.equals("hdpi")){ builder = new AlertDialog.Builder(context); }else{ builder = new AlertDialog.Builder(context, R.style.todoDialogLight); } } else { if(density.equals("hdpi")){ builder = new AlertDialog.Builder(context); }else{ builder = new AlertDialog.Builder(context, R.style.todoDialogDark); } } builder.setTitle(context.getString(R.string.app_name)) .setMessage(message) .setCancelable(false) .setPositiveButton("YES", yesAction) .setNegativeButton("NO", noAction); return builder.create(); } 

希望它可以帮助有相同问题的其他开发人员。

对话框

 public void startAlertDialog(String message) { AlertDialog.Builder alertDialog=new AlertDialog.Builder(this); alertDialog.setCancelable(false); LayoutInflater inflater=(LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); View view=inflater.inflate(R.layout.alertdialoglayout,null); TextViewRagular textViewRagular=(TextViewRagular)view.findViewById(R.id.textviewMessage); textViewRagular.setText(message); alertDialog.setView(view); dialog=alertDialog.create(); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.show(); } 

如果在styles.xml中使用自定义主题, colorAccent的颜色设置为较暗的颜色。

 <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimary</item> <item name="colorAccent">@color/colorPrimary</item> </style>