From b859e218693e00bd8929d02f5898fe9ac15a49b2 Mon Sep 17 00:00:00 2001 From: HITGIF Date: Sun, 10 Sep 2017 12:18:12 +0800 Subject: [PATCH] Clear Button --- sample/src/main/res/layout/activity_main.xml | 56 +++++----- .../textfieldboxes/ClipToBoundsView.java | 1 + .../textfieldboxes/TextFieldBoxes.java | 103 +++++++++++++++--- .../ic_clear_circle_black_24dp.png | Bin 0 -> 16193 bytes .../ic_clear_circle_black_24dp.png | Bin 0 -> 15888 bytes .../ic_clear_circle_black_24dp.png | Bin 0 -> 15281 bytes .../ic_clear_circle_black_24dp.png | Bin 0 -> 15707 bytes .../ic_clear_circle_black_24dp.png | Bin 0 -> 16069 bytes .../res/layout/text_field_boxes_layout.xml | 20 +++- textfieldboxes/src/main/res/values/attrs.xml | 1 + 10 files changed, 133 insertions(+), 48 deletions(-) create mode 100644 textfieldboxes/src/main/res/drawable-hdpi/ic_clear_circle_black_24dp.png create mode 100644 textfieldboxes/src/main/res/drawable-mdpi/ic_clear_circle_black_24dp.png create mode 100644 textfieldboxes/src/main/res/drawable-xhdpi/ic_clear_circle_black_24dp.png create mode 100644 textfieldboxes/src/main/res/drawable-xxhdpi/ic_clear_circle_black_24dp.png create mode 100644 textfieldboxes/src/main/res/drawable-xxxhdpi/ic_clear_circle_black_24dp.png diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 4d40d5d..f4828ff 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -1,40 +1,42 @@ - - - - - - - - - + android:scrollbarStyle="outsideOverlay" + tools:context=".MainActivity"> + + + + app:hasClearButton="true" + app:text="Text" /> - + - + @@ -77,8 +79,8 @@ - + @@ -97,12 +99,12 @@ + - - + - \ No newline at end of file + \ No newline at end of file diff --git a/textfieldboxes/src/main/java/studio/carbonylgroup/textfieldboxes/ClipToBoundsView.java b/textfieldboxes/src/main/java/studio/carbonylgroup/textfieldboxes/ClipToBoundsView.java index 10f1906..b535100 100644 --- a/textfieldboxes/src/main/java/studio/carbonylgroup/textfieldboxes/ClipToBoundsView.java +++ b/textfieldboxes/src/main/java/studio/carbonylgroup/textfieldboxes/ClipToBoundsView.java @@ -51,6 +51,7 @@ protected void onDraw(Canvas canvas) { canvas.getClipBounds(rect); rectF.set(rect); + clipPath.reset(); clipPath.addRoundRect(rectF, cornerRadius, cornerRadius, Path.Direction.CW); canvas.clipPath(clipPath); super.onDraw(canvas); diff --git a/textfieldboxes/src/main/java/studio/carbonylgroup/textfieldboxes/TextFieldBoxes.java b/textfieldboxes/src/main/java/studio/carbonylgroup/textfieldboxes/TextFieldBoxes.java index d9adc38..ad4586d 100644 --- a/textfieldboxes/src/main/java/studio/carbonylgroup/textfieldboxes/TextFieldBoxes.java +++ b/textfieldboxes/src/main/java/studio/carbonylgroup/textfieldboxes/TextFieldBoxes.java @@ -7,7 +7,7 @@ import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.LayerDrawable; import android.support.v4.view.ViewCompat; -import android.support.v7.widget.AppCompatImageView; +import android.support.v7.widget.AppCompatImageButton; import android.support.v7.widget.AppCompatTextView; import android.text.Editable; import android.text.TextWatcher; @@ -127,19 +127,25 @@ public class TextFieldBoxes extends FrameLayout { */ protected int iconSignifierResourceId; + /** + * whether to show the clear button at the end of the EditText. False by default. + */ + protected boolean hasClearButton; + /** * whether the EditText is having the focus. False by default. */ protected boolean hasFocus; protected View panel; - protected FrameLayout bottomLine; + protected View bottomLine; protected ViewGroup editTextLayout; protected ExtendedEditText editText; protected AppCompatTextView helperLabel; protected AppCompatTextView counterLabel; protected AppCompatTextView floatingLabel; - protected AppCompatImageView iconImageView; + protected AppCompatImageButton clearButton; + protected AppCompatImageButton iconImageView; protected InputMethodManager inputMethodManager; protected RelativeLayout rightShell; protected RelativeLayout upperPanel; @@ -226,6 +232,9 @@ protected void onFinishInflate() { this.upperPanel = findViewById(R.id.text_field_boxes_upper_panel); this.bottomPart = findViewById(R.id.text_field_boxes_bottom); this.labelColor = this.floatingLabel.getCurrentTextColor(); + this.clearButton = findViewById(R.id.text_field_boxes_clear_button); + this.clearButton.setColorFilter(DEFAULT_TEXT_COLOR); + this.clearButton.setAlpha(0.35f); this.helperLabel = findViewById(R.id.text_field_boxes_helper); this.counterLabel = findViewById(R.id.text_field_boxes_counter); this.iconImageView = findViewById(R.id.text_field_boxes_imageView); @@ -233,7 +242,7 @@ protected void onFinishInflate() { this.labelTopMargin = RelativeLayout.LayoutParams.class .cast(this.floatingLabel.getLayoutParams()).topMargin; - panel.setOnClickListener(new OnClickListener() { + this.panel.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!isActivated()) activate(true); @@ -242,7 +251,7 @@ public void onClick(View v) { } }); - iconImageView.setOnClickListener(new OnClickListener() { + this.iconImageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!isActivated()) activate(true); @@ -251,7 +260,7 @@ public void onClick(View v) { } }); - editText.setOnFocusChangeListener(new OnFocusChangeListener() { + this.editText.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean b) { if (b) setHasFocus(true); @@ -259,7 +268,7 @@ public void onFocusChange(View view, boolean b) { } }); - editText.addTextChangedListener(new TextWatcher() { + this.editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @@ -276,6 +285,13 @@ public void afterTextChanged(Editable editable) { } }); + this.clearButton.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + setText(""); + } + }); + /* Texts */ setText(this.text); setLabelText(this.labelText); @@ -301,6 +317,7 @@ public void afterTextChanged(Editable editable) { setSingleLine(this.singleLine); setMaxLines(this.maxLines); setIconSignifier(this.iconSignifierResourceId); + setHasClearButton(this.hasClearButton); setHasFocus(this.hasFocus); updateCounterText(); } @@ -313,7 +330,15 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int widthMode = MeasureSpec.getMode(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); - if (widthMode == MeasureSpec.AT_MOST) { + if (widthMode == MeasureSpec.EXACTLY) { + + ((RelativeLayout.LayoutParams) this.clearButton.getLayoutParams()).addRule(RelativeLayout.RIGHT_OF, 0); + ((RelativeLayout.LayoutParams) this.clearButton.getLayoutParams()).addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + ((RelativeLayout.LayoutParams) this.clearButton.getLayoutParams()).addRule(RelativeLayout.END_OF, 0); + ((RelativeLayout.LayoutParams) this.clearButton.getLayoutParams()).addRule(RelativeLayout.ALIGN_PARENT_END); + ((RelativeLayout.LayoutParams) this.editText.getLayoutParams()).addRule(RelativeLayout.LEFT_OF, R.id.text_field_boxes_clear_button); + + } else if (widthMode == MeasureSpec.AT_MOST) { /* wrap_content */ this.editText.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT; @@ -383,6 +408,7 @@ protected void handleAttributes(Context context, AttributeSet attrs) { this.maxLines = styledAttrs.getInt(R.styleable.TextFieldBoxes_maxLines, Integer.MAX_VALUE); this.iconSignifierResourceId = styledAttrs. getResourceId(R.styleable.TextFieldBoxes_iconSignifier, 0); + this.hasClearButton = styledAttrs.getBoolean(R.styleable.TextFieldBoxes_hasClearButton, false); this.hasFocus = styledAttrs.getBoolean(R.styleable.TextFieldBoxes_hasFocus, false); styledAttrs.recycle(); @@ -483,6 +509,11 @@ protected void setHighlightColor(int colorRes) { */ protected void updateCounterText() { + /* Show clear button if there is anything */ + if (hasClearButton) + if (getText().length() == 0) showClearButton(false); + else showClearButton(true); + /* Don't Count Space & Line Feed */ int length = getText().replaceAll(" ", "").replaceAll("\n", "").length(); String lengthStr = Integer.toString(length) + " / "; @@ -492,12 +523,8 @@ protected void updateCounterText() { /* MAX & MIN */ this.counterLabel.setText(lengthStr + Integer.toString(this.minCharacters) + "-" + Integer.toString(this.maxCharacters)); - if (length < this.minCharacters || length > this.maxCharacters) { - setCounterError(); - } - else { - removeCounterError(); - } + if (length < this.minCharacters || length > this.maxCharacters) setCounterError(); + else removeCounterError(); } else { /* MAX ONLY */ @@ -571,7 +598,14 @@ public void removeError() { this.helperLabel.setText(this.helperText); } + protected void showClearButton(boolean show) { + + if (show) this.clearButton.setVisibility(View.VISIBLE); + else this.clearButton.setVisibility(View.GONE); + } + /* Text Setters */ + /** * set EditText text, raise the labelText floatingLabel if there is something * @@ -761,6 +795,10 @@ public void removeIconSignifier() { this.iconImageView.setVisibility(View.GONE); } + public void setHasClearButton(boolean hasClearButton) { + this.hasClearButton = hasClearButton; + } + /** * set if the EditText is having focus * @@ -783,10 +821,6 @@ public void setHasFocus(boolean hasFocus) { } /* Text Getters */ - public EditText getEditText() { - return this.editText; - } - public String getText() { return this.text; } @@ -849,6 +883,35 @@ public int getMinCharacters() { return this.minCharacters; } + /* View Getters */ + public View getPanel() { + return this.panel; + } + + public View getBottomLine() { + return this.bottomLine; + } + + public EditText getEditText() { + return this.editText; + } + + public AppCompatTextView getHelperLabel() { + return this.helperLabel; + } + + public AppCompatTextView getCounterLabel() { + return this.counterLabel; + } + + public AppCompatTextView getFloatingLabel() { + return this.floatingLabel; + } + + public AppCompatImageButton getIconImageView() { + return iconImageView; + } + /* Other Getters */ public boolean isActivated() { return this.activated; @@ -870,6 +933,10 @@ public int getIconSignifierResourceId() { return this.iconSignifierResourceId; } + public boolean getHasClearButton() { + return this.hasClearButton; + } + public boolean getHasFocus() { return this.hasFocus; } diff --git a/textfieldboxes/src/main/res/drawable-hdpi/ic_clear_circle_black_24dp.png b/textfieldboxes/src/main/res/drawable-hdpi/ic_clear_circle_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..1577a245993f12eab4b54b7bd451d840c876b339 GIT binary patch literal 16193 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 A8UO$Q literal 0 HcmV?d00001 diff --git a/textfieldboxes/src/main/res/drawable-mdpi/ic_clear_circle_black_24dp.png b/textfieldboxes/src/main/res/drawable-mdpi/ic_clear_circle_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..d5b0e9b4776f27ca6ca61492412a9ebb39c0ea35 GIT binary patch literal 15888 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 Aq5uE@ literal 0 HcmV?d00001 diff --git a/textfieldboxes/src/main/res/drawable-xxhdpi/ic_clear_circle_black_24dp.png b/textfieldboxes/src/main/res/drawable-xxhdpi/ic_clear_circle_black_24dp.png new file mode 100644 index 0000000000000000000000000000000000000000..a95fba723190b17ec2f26129d5cbdcaec28309eb GIT binary patch literal 15707 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 literal 0 HcmV?d00001 diff --git a/textfieldboxes/src/main/res/layout/text_field_boxes_layout.xml b/textfieldboxes/src/main/res/layout/text_field_boxes_layout.xml index a05c510..a225eb5 100644 --- a/textfieldboxes/src/main/res/layout/text_field_boxes_layout.xml +++ b/textfieldboxes/src/main/res/layout/text_field_boxes_layout.xml @@ -4,7 +4,7 @@ android:layout_height="match_parent" android:orientation="horizontal"> - - - + + + diff --git a/textfieldboxes/src/main/res/values/attrs.xml b/textfieldboxes/src/main/res/values/attrs.xml index efb5b6c..94c1af4 100755 --- a/textfieldboxes/src/main/res/values/attrs.xml +++ b/textfieldboxes/src/main/res/values/attrs.xml @@ -27,6 +27,7 @@ +