Appcompat Alert Dialog Action button background On pressed state

前端 未结 3 1542
既然无缘
既然无缘 2021-02-04 17:41

I am trying new AlertDialog from appcompat v7 22.1.1.

It works pretty well (In all android versions) as in image.

相关标签:
3条回答
  • 2021-02-04 18:19

    You can use style attributes like

    • buttonBarButtonStyle
    • buttonBarNegativeButtonStyle
    • buttonBarNeutralButtonStyle
    • buttonBarPositiveButtonStyle

    Example:

    <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>
    

    Where dialogButtonSelector is our custom drawable selector.

    Unfortunatelly setting background on dialog_button destroy our paddings and margins so I need to set it again.

    dialog_button style can inherit through Widget.AppCompat.Button.ButtonBar.AlertDialog but I found that it has missing styles like textStyle bold.

    0 讨论(0)
  • 2021-02-04 18:19

    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); builder.setMessage("Title"); 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>
    
    0 讨论(0)
  • I have the Answer for the 3rd Questions
    ( How can I have different colors of action buttons (Is it possible)? )

    Code:

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

    Happy Coding :)

    0 讨论(0)
提交回复
热议问题