【问题标题】:Appcompat Alert Dialog Action button background On pressed stateAppcompat 警报对话框操作按钮背景 按下状态
【发布时间】:2015-05-14 09:33:38
【问题描述】:

我正在尝试 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) 我怎样才能有不同颜色的动作按钮(有可能)?

任何帮助都会很棒。

【问题讨论】:

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


    【解决方案1】:

    您可以使用样式属性,例如

    • 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 这样的样式。

    【讨论】:

    • 很晚才接受答案。感谢您提供出色的答案并且工作良好。
    【解决方案2】:

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

    代码:

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

    快乐编码:)

    【讨论】:

    • 这是一个不错的尝试。但我想要它的主题。并且接受的答案效果很好。虽然为它的代码版本 +1。
    • 谢谢。快乐编码:)
    【解决方案3】:

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("标题"); builder.setCancelable(true);

    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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-12
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 2019-03-20
      • 2015-08-27
      相关资源
      最近更新 更多