Appcompat警报对话框操作按钮背景按下状态

时间:2015-05-14 09:33:38

标签: android android-layout dialog alertdialog android-theme

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

它在图像中运行得非常好(在所有Android版本中)。

enter image description here

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&gt; = 21中没有按下的颜色,这是什么黑客?

3)如何使用不同颜色的动作按钮(是否可能)?

任何帮助都会很棒。

3 个答案:

答案 0 :(得分:19)

您可以使用

等样式属性
  • 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是我们的自定义绘图选择器。

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

dialog_button样式可以通过Widget.AppCompat.Button.ButtonBar.AlertDialog继承,但我发现它缺少textStyle bold等样式。

答案 1 :(得分:2)

我有第3个问题的答案 (我怎样才能有不同颜色的动作按钮(是否可能)?)

代码:

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

快乐编码:)

答案 2 :(得分:0)

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage(&#34;名称&#34); 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>