Appcompat警报对话框动作button背景处于按下状态

我正在尝试从appcompat v7 22.1.1新的AlertDialog。

它工作得很好(在所有的Android版本),如图像。

在这里输入图像说明

AlertDialog的样式是这样的。 (现在我正在使用硬编码的颜色值而不是颜色资源)

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <item name="colorPrimaryDark">#111111</item> <item name="colorPrimary">#00ddff</item> <item name="colorAccent">#0044aa</item> <item name="colorButtonNormal">#00aaaa</item> <item name="colorControlHighlight">#00ddff</item> <item name="alertDialogTheme">@style/AlertDialogTheme</item> </style> <style name="AlertDialogTheme" parent="Theme.AppCompat.Dialog.Alert"> <item name="colorAccent">#0044aa</item> <item name="android:background">#ffffff</item> <item name="android:textColorPrimary">#000000</item> <item name="android:windowTitleStyle">@style/MyTitleTextStyle</item> </style> <style name="MyTitleTextStyle"> <item name="android:textColor">#0044aa</item> <item name="android:textAppearance">@style/TextAppearance.AppCompat.Title</item> </style> 

我的问题是,

1) 如何改变图像中圆形(灰色)的statePressed颜色?

2)没有按下的颜色是在android> = 21,这是什么黑客?

3)我怎样才能有不同颜色的动作button(可能)?

任何帮助将是伟大的。

Solutions Collecting From Web of "Appcompat警报对话框动作button背景处于按下状态"

你可以使用类似的风格属性

  • buttonBarButtonStyle
  • buttonBarNegativeButtonStyle
  • buttonBarNeutralButtonStyle
  • buttonBarPositiveButtonStyle

例:

 <style name="dialog_theme" parent="Theme.AppCompat.Dialog.Alert"> <item name="buttonBarNegativeButtonStyle">@style/dialog_button.negative</item> <item name="buttonBarPositiveButtonStyle">@style/dialog_button.positive</item> </style> <style name="dialog_button"> <item name="android:textStyle">bold</item> <item name="android:minWidth">64dp</item> <item name="android:paddingLeft">8dp</item> <item name="android:paddingRight">8dp</item> <item name="android:background">@drawable/dialogButtonSelector</item> </style> <style name="dialog_button.negative"> <item name="android:textColor">#f00</item> </style> <style name="dialog_button.positive"> <item name="android:layout_marginLeft">8dp</item> <item name="android:textColor">#00f</item> </style> 

dialogButtonSelector是我们自定义的可绘制select器。

不幸的是,在dialog_button上设置背景dialog_button破坏我们的填充和边距,所以我需要重新设置它。

dialog_button风格可以通过Widget.AppCompat.Button.ButtonBar.AlertDialoginheritance,但我发现它缺less像textStyle bold样式。

我有第三个问题的答案
(我怎样才能有不同颜色的动作button(可能)?)

码:

 // Initialize AlertDialog & AlertDialog Builder AlertDialog.Builder builder = new AlertDialog.Builder(YourActivity.this); builder.setTitle("AlertDialog Title"); ........... ......... //Build your AlertDialog AlertDialog Demo_alertDialog= builder.create(); Demo_alertDialog.show(); //For Positive Button: Button b_pos; b_pos=Demo_alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); if(b_pos!=null){ b_pos.setTextColor(getResources().getColor(R.color.YourColor)); } //For Neutral Button: Button b_neu; b_neu=Demo_alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); if(b_neu!=null){ b_neu.setTextColor(getResources().getColor(R.color.YourColor)); } //For Negative Button: Button b_neg; b_neg=Demo_alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); if(b_neg!=null){ b_neg.setTextColor(getResources().getColor(R.color.YourColor)); } 

快乐编码:)

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage( “标题”); builder.setCancelable(真);

 builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alertdialog = builder.create(); alertdialog.show(); Button nbutton = alertdialog.getButton(DialogInterface.BUTTON_NEGATIVE); nbutton.setBackground(getResources().getDrawable(R.drawable.btn_press_white_rect)); Button pbutton = alertdialog.getButton(DialogInterface.BUTTON_POSITIVE); pbutton.setBackground(getResources().getDrawable(R.drawable.btn_press_white_rect)); **btn_press_white_rect.xml** <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@drawable/rounded_rect_yellow" ></item> <item android:state_pressed="false" android:drawable="@drawable/rounded_rect_white" ></item> </selector>