private void findSubIndexForColor(int topIndex, int color) { if (getBuilder().mColorsSub == null || getBuilder().mColorsSub.length - 1 < topIndex) return; int[] subColors = getBuilder().mColorsSub[topIndex]; for (int subIndex = 0; subIndex < subColors.length; subIndex++) { if (subColors[subIndex] == color) { subIndex(subIndex); break; } } }
@Override public void onClick(View v) { if (v.getTag() != null) { final int index = (Integer) v.getTag(); final MaterialDialog dialog = (MaterialDialog) getDialog(); final Builder builder = getBuilder(); if (isInSub()) { subIndex(index); } else { topIndex(index); if (mColorsSub != null && index < mColorsSub.length) { dialog.setActionButton(DialogAction.NEUTRAL, builder.mBackBtn); isInSub(true); } } invalidateDynamicButtonColors(); invalidate(); } }
@NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { if (getArguments() == null || !getArguments().containsKey("builder")) throw new IllegalStateException( "ColorChooserDialog should be created using its Builder interface."); generateColors(); final int preselectColor = getBuilder().mPreselect; if (preselectColor != 0) { for (int topIndex = 0; topIndex < mColorsTop.length; topIndex++) { if (mColorsTop[topIndex] == preselectColor) { topIndex(topIndex); if (getBuilder().mAccentMode) { subIndex(2); } else if (getBuilder().mColorsSub != null) { findSubIndexForColor(topIndex, preselectColor); } else { subIndex(5); } break; } if (mColorsSub != null) { boolean found = false; for (int subIndex = 0; subIndex < mColorsSub[topIndex].length; subIndex++) { if (mColorsSub[topIndex][subIndex] == preselectColor) { topIndex(topIndex); subIndex(subIndex); found = true; break; } } if (found) break; } } } final DisplayMetrics dm = getResources().getDisplayMetrics(); mCircleSize = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 56, dm); mGrid = new GridView(getContext()); mGrid.setLayoutParams( new ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mGrid.setColumnWidth(mCircleSize); mGrid.setNumColumns(GridView.AUTO_FIT); final int eightDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 8, dm); mGrid.setVerticalSpacing(eightDp); mGrid.setHorizontalSpacing(eightDp); final int sixteenDp = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 16, dm); mGrid.setPadding(sixteenDp, sixteenDp, sixteenDp, sixteenDp); mGrid.setClipToPadding(false); mGrid.setStretchMode(GridView.STRETCH_COLUMN_WIDTH); mGrid.setGravity(Gravity.CENTER); Builder builder = getBuilder(); MaterialDialog dialog = new MaterialDialog.Builder(getActivity()) .title(getTitle()) .autoDismiss(false) .customView(mGrid, false) .neutralText(builder.mCancelBtn) .positiveText(builder.mDoneBtn) .onPositive( new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { mCallback.onColorSelection(ColorChooserDialog.this, getSelectedColor()); dismiss(); } }) .onNeutral( new MaterialDialog.SingleButtonCallback() { @Override public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { if (isInSub()) { dialog.setActionButton(DialogAction.NEUTRAL, getBuilder().mCancelBtn); isInSub(false); invalidate(); } else { dialog.cancel(); } } }) .showListener( new DialogInterface.OnShowListener() { @Override public void onShow(DialogInterface dialog) { invalidateDynamicButtonColors(); } }) .build(); invalidate(); return dialog; }