关于android:AlertDialog更改正按钮颜色

AlertDialog change positive button color

enter image description here

我想更改Alertdialog中的肯定按钮的颜色,这是我在下面做的事情:

// style.xml

1
2
3
4
5
6
7
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="android:buttonBarPositiveButtonStyle">@style/positive</item>
</style>

<style name="positive">
    <item name="android:textColor">@color/accent</item>
</style>

我通过以下方式使用样式:

1
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogCustom);

但是我正在做的事情没有用,我只想更改正面按钮的颜色。 我不想在Java代码中更改按钮的颜色。

提前致谢 :-)

编辑1
Alertdialog布局xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<android.support.v7.internal.widget.ButtonBarLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/buttonPanel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layoutDirection="locale"
android:orientation="horizontal"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="4dp"
android:paddingBottom="4dp"
android:gravity="bottom"
app:allowStacking="@bool/abc_allow_stacked_button_bar"
style="?attr/buttonBarStyle">

<Button
    android:id="@android:id/button3"
    style="?attr/buttonBarNeutralButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<android.support.v4.widget.Space
    android:id="@+id/spacer"
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:visibility="invisible" />

<Button
    android:id="@android:id/button2"
    style="?attr/buttonBarNegativeButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<Button
    android:id="@android:id/button1"
    style="?attr/buttonBarPositiveButtonStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />


注意:不建议使用该解决方案,因为这实际上是一个骇人听闻的解决方案。 它没有遵循android设计,因此不应使用。 而且我通过Java更改了正按钮的颜色。 感谢@Divers指出这一点。

styles.xml

1
2
3
4
5
6
7
<style name="AlertDialogCustom" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="buttonBarPositiveButtonStyle">@style/positive</item>
</style>

<style name="positive">
    <item name="android:textColor">@color/accent</item>
</style>

用法

1
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(), R.style.AlertDialogCustom);

也许这是您应注意的一点,buttonBarPositiveButtonStyle而不是android: buttonBarPositiveButtonStyle


1
2
3
4
5
6
builder.setOnShowListener( new OnShowListener() {
  @Override
  public void onShow(DialogInterface arg0) {
       builder.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(COLOR_YOU_WANT);
  }
}

希望能帮助到你! 干杯!


无法通过样式进行操作,因为通常从UI角度来看这是错误的。 如果仍然要执行此操作,请通过Java执行。