How can I change the appearance of ListPreference Dialog

前端 未结 4 432
别跟我提以往
别跟我提以往 2021-01-13 10:02

I would like to change the RadioButton that appears on ListPreference dialog for a check mark or something different, or none, is there a simple wa

4条回答
  •  离开以前
    2021-01-13 10:36

    If you want to change the whole dialog, maybe to use a replacement dialog library like this material-dialogs package, you can use this replacement ListPreference:

    import com.afollestad.materialdialogs.MaterialDialog;
    
    public class MaterialListPreference extends ListPreference {
      private MaterialDialog.Builder mBuilder;
      private Context context;
    
      public MaterialListPreference(Context context) {
        super(context);
        this.context = context;
      }
    
      public MaterialListPreference(Context context, AttributeSet attrs) {
        super(context, attrs);
        this.context = context;
      }
    
      @Override
      protected void showDialog(Bundle state) {
        mBuilder = new MaterialDialog.Builder(context);
        mBuilder.title(getTitle());
        mBuilder.icon(getDialogIcon());
        mBuilder.positiveText(null);
        mBuilder.negativeText(getNegativeButtonText());
        mBuilder.items(getEntries());
        mBuilder.itemsCallback(new MaterialDialog.ListCallback() {
          @Override
          public void onSelection(MaterialDialog dialog, View itemView, int which, CharSequence text) {
            onClick(null, DialogInterface.BUTTON_POSITIVE);
            dialog.dismiss();
    
            if (which >= 0 && getEntryValues() != null) {
              String value = getEntryValues()[which].toString();
              if (callChangeListener(value))
                setValue(value);
            }
          }
        });
    
        final View contentView = onCreateDialogView();
        if (contentView != null) {
          onBindDialogView(contentView);
          mBuilder.customView(contentView);
        }
        else
          mBuilder.content(getDialogMessage());
    
        mBuilder.show();
      }
    
    }
    

    It doesn't do much, just the bare minimum to override the dialog display and selection callback parts. YMMV very slightly if you opt for a different dialog library but not too much, they tend to be more or less direct replacements for AlertDialog.

提交回复
热议问题