Images for AlertDialog buttons

后端 未结 6 1964
再見小時候
再見小時候 2021-01-11 14:19

Is it possible to add drawables to the positive, negative and neutral buttons of an AlertDialog? If yes, then how?

6条回答
  •  再見小時候
    2021-01-11 15:20

    Since onPrepareDialog is deprecated, you can use the onShowListener instead.

    Also you should set the Drawable bounds or it will be placed far left.

    Output of Code below

    Output of Code below

    public class MyDialog extends DialogFragment {
    
        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            final AlertDialog dialog = new AlertDialog.Builder(getActivity())
                    .setTitle("My Dialog")
                    .setNegativeButton("Cancel", new OnClickListener() {
    
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                        }
                    }).setPositiveButton("Play", new OnClickListener() {
    
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // TODO Auto-generated method stub
                        }
                    }).create();
            dialog.setOnShowListener(new OnShowListener() {
    
                @Override
                public void onShow(DialogInterface dialogInterface) {
                    Button button = dialog.getButton(AlertDialog.BUTTON_POSITIVE);
    
                    // if you do the following it will be left aligned, doesn't look
                    // correct
                    // button.setCompoundDrawablesWithIntrinsicBounds(android.R.drawable.ic_media_play,
                    // 0, 0, 0);
    
                    Drawable drawable = getActivity().getResources().getDrawable(
                            android.R.drawable.ic_media_play);
    
                    // set the bounds to place the drawable a bit right
                    drawable.setBounds((int) (drawable.getIntrinsicWidth() * 0.5),
                            0, (int) (drawable.getIntrinsicWidth() * 1.5),
                            drawable.getIntrinsicHeight());
                    button.setCompoundDrawables(drawable, null, null, null);
    
                    // could modify the placement more here if desired
                    // button.setCompoundDrawablePadding();
                }
            });
            return dialog;
        }
    }
    

提交回复
热议问题