Android - 如何更改AlertDialog中按钮的外观?

时间:2017-06-14 02:29:46

标签: android dialog

我想创建一个带有如下按钮的AlertDialog:https://developer.android.com/images/ui/dialogs_regions.png

但是,每当我使用AlertDialog.Builder创建AlertDialog时,我最终会得到如下所示的按钮:https://developer.android.com/images/ui/dialog_buttons.png

如何更改AlertDialog以使按钮看起来像第一个示例(即占据对话框的整个底部,每个按钮之间有灰色分隔线)?请注意,我不是要尝试更改对话框窗口的颜色,只是按钮的显示方式。理想情况下,我只想使用默认的Android样式而不定义自定义样式 - 这可能吗?

这是我用来创建和显示AlertDialog的代码:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

alertDialogBuilder.setTitle("Include answers in summary?");
alertDialogBuilder.setMessage("You have completed " + String.valueOf(questionsCompleted) + " out of 18 questions. Would you like the summary to include these answers along with the questions?");
alertDialogBuilder.setCancelable(false);

alertDialogBuilder.setPositiveButton("Include", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Intent intent = new Intent(getApplicationContext(), SummaryActivity.class);
        intent.putExtra("componentNumber", 0);
        intent.putExtra("includeAnswers", true);
        startActivity(intent);
        }
    });

alertDialogBuilder.setNegativeButton("Omit", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Intent intent = new Intent(getApplicationContext(), SummaryActivity.class);
        intent.putExtra("componentNumber", 0);
        intent.putExtra("includeAnswers", false);
        startActivity(intent);
    }
});

alertDialogBuilder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        dialog.cancel();
    }
});

AlertDialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

此AlertDialog中有三个操作。在没有太多细节的情况下,两个按钮将用户带到总结调查问卷的相同活动,但是包括或不包含他们的答案,而另一个按钮取消对话框。我知道我应该使用NegativeButton取消对话框,但即使Android开发人员对话框指南说正面和负面按钮之间会出现一个中性按钮,我也收到了中性的订单 - >负>正。结果,我在左侧看到了Omit选项,右侧有了Cancel和Include选项,这对我来说非常不直观。

我想将按钮的顺序更改为“否定” - >“中性” - >“正面”并将“否定”按钮定义为取消对话框,以便将导致摘要活动的两个按钮组合在一起 - 这有可能吗?

3 个答案:

答案 0 :(得分:1)

我相信我的回答对您最有帮助。只需为您的对话框创建一个布局,就像下面的那个我认为正是您想要的布局。

Single

然后在代码中设置对话框的布局:

<?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="?android:dividerVertical"
        android:showDividers="middle">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Are you sure?"
    android:textStyle="bold"
    android:textSize="20sp"
    android:gravity="center"
    android:layout_marginTop="10dp"
    android:layout_marginBottom="10dp"
    android:id="@+id/dialog_text"/>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    style="?android:buttonBarStyle"
    android:divider="?android:dividerHorizontal"
    android:showDividers="middle">

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/cancel_action"
        android:layout_weight="1"
        android:text="Cancel"
        android:textAllCaps="false"
        style="?android:buttonBarButtonStyle"/>

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:id="@+id/ok_action"
        android:layout_weight="1"
        android:text="Ok"
        android:textAllCaps="false"
        style="?android:buttonBarButtonStyle"/>
</LinearLayout>

</LinearLayout>

答案 1 :(得分:0)

AlertDialog按钮&#39;外观基于相应的Android API版本,所以你想要的(基于你的第一个截图)是Android 4.4.2(KitKat)中的AlertDialog,应用主题为Theme.AppCompat - 我知道这个因为&# 39;它在我的平板电脑4.4.2中的显示方式。例如: enter image description here

答案 2 :(得分:0)

要在不同或指定主题中加载 AlertDialog,您可以尝试以下内容:

AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(new ContextThemeWrapper(this, android.R.style.Theme_Holo_Light_Dialog)));

可从API 1获得。

此外,关于按钮序列,您只需切换代码即可在按钮单击时获得所需结果,忽略按钮类型。 类似的东西:

builder.setNeutralButton("NO",listener);
builder.setNegativeButton("NOT SURE",listener);
builder.setPositiveButton("YES",listener);