对话框不显示正面和负面按钮

时间:2016-09-14 02:46:06

标签: android dialog

我使用AlertDialog提醒用户确认删除。我检查了我的设备(Android 5.1)并且显示良好

enter image description here

但是在另一台设备上(也运行Android 5.1),对话框错过了正面和负面按钮。

enter image description here

我查了一下,发现设备发生这个问题有中等分辨率(960x540,854x480)。

解决方案是否与此问题有关? 如果没有,你能告诉我原因以及如何解决这个问题吗?

我的显示对话框代码:

    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>

11 个答案:

答案 0 :(得分:32)

所以按钮就在我身边。不幸的是,他们是白色背景上的白色文本。它与分辨率无关,但更多与您选择的主题有关。要解决此问题,您需要在对话框主题中设置正确的文本颜色。

例如,在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);

希望这有帮助。

答案 1 :(得分:6)

@Ali答案是正确的,但不适用于新的设计库

要在设计库中使用它,请使用此样式。

<style name="AlertDialogTheme" parent="Theme.MaterialComponents.Light.Dialog.Alert">
    <item name="colorPrimary">@color/colorAccent</item>
</style>

然后按如下方式使用它。

 AlertDialog.Builder(it, R.style.AlertDialogTheme)
                    .setMessage("The message")
                    .setPositiveButton("Yes") { _, _ -> /* Do something*/}
                    .setNegativeButton("No") { _, _ -> }
                    .show()

答案 2 :(得分:4)

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

答案 3 :(得分:3)

阿里的解决方案对我有用。我的原始代码适用于以前的Android版本&lt; 7。但是在我的Pixel上进行测试会产生隐形按钮。我添加了阿里详细描述的风格概念,如下所示,一切都很好:

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

答案 4 :(得分:1)

如果您在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>

答案 5 :(得分:1)

转到colors.xml并从中更改colorAccent

<color name="colorAccent">#FFFFFF</color>

对此:

<color name="colorAccent">#FF4081</color>

答案 6 :(得分:0)

这与解决方案有关,我不知道原因,只是提出了if else条件来解决这个问题。

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

希望对遇到同样问题的其他开发者有帮助。

答案 7 :(得分:0)

对话框对话框;

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

答案 8 :(得分:0)

我们可以为按钮设置颜色。

public  void showImageDownloadDailog(Activity activity, String message)
{
    AlertDialog.Builder builder = new AlertDialog.Builder(activity);
    builder.setMessage(message);
    builder.setCancelable(false);
    builder.setPositiveButton(
            "Yes",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                   //TODO
                }
            });

    builder.setNegativeButton(
            "No",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    dialog.cancel();
                    //TODO
              }
            });

    AlertDialog alert = builder.create();
    alert.setOnShowListener(arg0 -> {
        alert.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(getResources().getColor(R.color.button_color));
        alert.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(getResources().getColor(R.color.button_color));
    });
    alert.show();
}

答案 9 :(得分:0)

如果您致电,也会出现此问题:

dialogBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });

        dialogBuilder.setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {

            }
        });

拨打电话后:

dialogBuilder.create();

答案 10 :(得分:0)

我知道已经晚了,但也许其他人需要它,请将您的样式更改为 MyAlertDialogStyle:

 <style name="MyAlertDialogStyle" parent="Theme.MaterialComponents.Light.Dialog.Alert">
        <!-- Used for the title and text -->
        <item name="android:textColorPrimary">#000000</item>
        <!-- Used for the background -->
        <item name="android:background">#FFFFFF</item>
        <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item>
        <item name="android:buttonBarPositiveButtonStyle">@style/MyPositiveTextStyle</item>
        <item name="android:buttonBarNegativeButtonStyle">@style/MyNegativeTextStyle</item>

 </style>
 <style name="MyTitleTextStyle">
        <item name="android:textColor">#FFEB3B</item>
        <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item>
 </style>
 <style name="MyPositiveTextStyle" parent="Widget.MaterialComponents.Button.TextButton">
        <item name="backgroundTint">@color/transparent</item>
        <item name="android:textColor">@color/green</item>
        <item name="android:textAppearance">@style/TextAppearance.AppCompat.Button</item>
 </style>
 <style name="MyNegativeTextStyle"  parent="Widget.MaterialComponents.Button.TextButton">
        <item name="android:textColor">@color/red</item>
 </style>