From 7cd539f929919dc96b3143b95211fd876f7caa8b Mon Sep 17 00:00:00 2001 From: antoineriche33 Date: Fri, 17 May 2019 15:25:16 +0200 Subject: [PATCH] fix button rendering to fill parent width --- .../com/rlab/sejima/features/MUButton.java | 91 +++++++++++++++---- .../java/com/rlab/sejima/features/MUCard.java | 2 +- .../rlab/sejima/features/MUPageControl.java | 4 +- .../com/rlab/sejima/features/MUTextField.java | 27 +++--- .../com/rlab/sejima/features/MUTopBar.java | 66 ++++++++++---- .../app/src/main/res/values/attrs.xml | 2 + .../app/src/main/res/values/colors.xml | 6 +- 7 files changed, 147 insertions(+), 51 deletions(-) diff --git a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUButton.java b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUButton.java index e2f3035..c52d651 100644 --- a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUButton.java +++ b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUButton.java @@ -159,7 +159,7 @@ public MUButton(Context context, AttributeSet attrs) { // Label mLabel = attributes.getString(R.styleable.MUButton_android_text); mLabelColor = attributes.getColor(R.styleable.MUButton_android_textColor, mLabelColor); -// mLabelFontSize = attributes.getDimensionPixelSize(R.styleable.MUButton_android_textSize, (int) mLabelFontSize); + mLabelFontSize = attributes.getDimensionPixelSize(R.styleable.MUButton_android_textSize, (int) mLabelFontSize); mLabelFontWeight = attributes.getInt(R.styleable.MUButton_android_textStyle, mLabelFontWeight); mLabelAlignment = attributes.getInt(R.styleable.MUButton_alignment, mLabelAlignment); mLabelHighLightedColor = attributes.getColor(R.styleable.MUButton_pressed_color, mLabelHighLightedColor); @@ -185,6 +185,63 @@ public MUButton(Context context, AttributeSet attrs) { * @param context the view context * @param attributes the XML attributes of the super view */ + + public void applyAttributes(Context context, TypedArray attributes) { + if(null != attributes){ + + mDisabledAlpha = attributes.hasValue(R.styleable.MUNavigationBar_disable_alpha) ? + attributes.getFloat(R.styleable.MUNavigationBar_disable_alpha, mDisabledAlpha) + : mDisabledAlpha; + mBkgColor = attributes.hasValue(R.styleable.MUNavigationBar_bkg_color) ? + attributes.getColor(R.styleable.MUNavigationBar_bkg_color, mBkgColor) + : mBkgColor; + mLabel = attributes.hasValue(R.styleable.MUNavigationBar_android_text) ? + attributes.getString(R.styleable.MUNavigationBar_android_text) + : mLabel; + mLabelColor = attributes.hasValue(R.styleable.MUNavigationBar_android_textColor) ? + attributes.getColor(R.styleable.MUNavigationBar_android_textColor, mLabelColor) + : mLabelColor; + mLabelFontSize = attributes.hasValue(R.styleable.MUNavigationBar_android_textSize) ? + attributes.getDimensionPixelSize(R.styleable.MUNavigationBar_android_textSize, (int) mLabelFontSize) + : mLabelFontSize; + mLabelFontWeight = attributes.hasValue(R.styleable.MUNavigationBar_android_textStyle) ? + attributes.getColor(R.styleable.MUNavigationBar_android_textStyle, mLabelFontWeight) + : mLabelFontWeight; + mLabelAlignment = attributes.hasValue(R.styleable.MUNavigationBar_alignment) ? + attributes.getInt(R.styleable.MUNavigationBar_alignment, mLabelAlignment) + : mLabelAlignment; + mLabelHighLightedColor = attributes.hasValue(R.styleable.MUNavigationBar_pressed_color) ? + attributes.getInt(R.styleable.MUNavigationBar_pressed_color, mLabelHighLightedColor) + : mLabelHighLightedColor; + mProgressingColor = attributes.hasValue(R.styleable.MUNavigationBar_progressing_color) ? + attributes.getInt(R.styleable.MUNavigationBar_progressing_color, mProgressingColor) + : mProgressingColor; + mBorderWidth = attributes.hasValue(R.styleable.MUNavigationBar_border_width) ? + attributes.getDimensionPixelSize(R.styleable.MUNavigationBar_border_width, 0) + : mBorderWidth; + mBorderColor = attributes.hasValue(R.styleable.MUNavigationBar_border_color) ? + attributes.getColor(R.styleable.MUNavigationBar_border_color, mBorderColor) + : mBorderColor; + mCornerRadius = attributes.hasValue(R.styleable.MUNavigationBar_corner_radius) ? + attributes.getDimensionPixelSize(R.styleable.MUNavigationBar_corner_radius, mCornerRadius) + : mBorderColor; + mIsLoading = attributes.hasValue(R.styleable.MUNavigationBar_is_loading) ? + attributes.getBoolean(R.styleable.MUNavigationBar_is_loading, false) + : mIsLoading; + mHorizontalPadding = attributes.hasValue(R.styleable.MUNavigationBar_android_paddingHorizontal) ? + attributes.getDimensionPixelSize(R.styleable.MUNavigationBar_android_paddingHorizontal, mHorizontalPadding) + : mHorizontalPadding; + mVerticalPadding = attributes.hasValue(R.styleable.MUNavigationBar_android_paddingVertical) ? + attributes.getDimensionPixelSize(R.styleable.MUNavigationBar_android_paddingVertical, mVerticalPadding) + : mVerticalPadding; + mFontStyle = attributes.hasValue(R.styleable.MUNavigationBar_font_style) ? + attributes.getResourceId(R.styleable.MUNavigationBar_font_style, mFontStyle) + : mFontStyle; + } + + init(context); + } + public MUButton(Context context, TypedArray attributes) { super(context); @@ -246,20 +303,19 @@ public MUButton(Context context, TypedArray attributes) { private void init(Context context){ mButton = new MaterialButton(context); - mButton.setGravity(Gravity.CENTER); - mButton.setAllCaps(false); + mButton.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); mButton.setId(View.generateViewId()); + mButton.setAllCaps(false); addView(mButton); mProgressBar = new ProgressBar(context); - mProgressBar.setIndeterminate(true); - - LayoutParams lp2 = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - lp2.addRule(RelativeLayout.ALIGN_END, mButton.getId()); - lp2.addRule(RelativeLayout.ALIGN_START, mButton.getId()); - lp2.addRule(RelativeLayout.ALIGN_TOP, mButton.getId()); - lp2.addRule(RelativeLayout.ALIGN_BOTTOM, mButton.getId()); - addView(mProgressBar, lp2); + RelativeLayout.LayoutParams progress = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + progress.addRule(RelativeLayout.ALIGN_LEFT, mButton.getId()); + progress.addRule(RelativeLayout.ALIGN_RIGHT, mButton.getId()); + progress.addRule(RelativeLayout.ALIGN_TOP, mButton.getId()); + progress.addRule(RelativeLayout.ALIGN_BOTTOM, mButton.getId()); + mProgressBar.setLayoutParams(progress); + addView(mProgressBar); // Background setBkgColor(mBkgColor); @@ -271,10 +327,10 @@ private void init(Context context){ setLabel(mLabel); setLabelFontWeight(mLabelFontWeight); setLabelAlignment(mLabelAlignment); -// setLabelFontSize(mLabelFontSize); + setLabelFontSize(mLabelFontSize); setProgressingColor(mProgressingColor); // Style -// setFontStyle(mFontStyle); + setFontStyle(mFontStyle); // Border setBorderWidth(mBorderWidth); setCornerRadius(mCornerRadius); @@ -287,8 +343,8 @@ private void init(Context context){ setFontColors(); setBackgroundColors(); //Padding -// setVerticalPadding(mVerticalPadding); -// setHorizontalPadding(mHorizontalPadding); + mButton.setPadding(mHorizontalPadding, mVerticalPadding, mHorizontalPadding, mVerticalPadding); + mProgressBar.setPadding(mHorizontalPadding, mVerticalPadding, mHorizontalPadding, mVerticalPadding); } @Override @@ -296,9 +352,6 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); mButton.setWidth(getMeasuredWidth()); mButton.setHeight(getMeasuredHeight()); - - mButton.setPadding(mHorizontalPadding, mVerticalPadding, mHorizontalPadding, mVerticalPadding); - mProgressBar.setPadding(mHorizontalPadding, mVerticalPadding, mHorizontalPadding, mVerticalPadding); } /** @@ -538,6 +591,8 @@ public void setLoading(boolean loading) { mProgressBar.setVisibility(mIsLoading ? VISIBLE : GONE) ); mButton.setTextColor(mIsLoading ? Color.TRANSPARENT : mLabelColor); + mButton.setClickable(!mIsLoading); + mButton.setEnabled(!mIsLoading); } /** diff --git a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUCard.java b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUCard.java index 8cb4a15..c293679 100644 --- a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUCard.java +++ b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUCard.java @@ -126,7 +126,7 @@ private void init(Context context, TypedArray attributeSet) { if(isInEditMode()){ TextView tv = new TextView(context); tv.setText(context.getResources().getString(R.string.app_name)); - tv.setBackgroundColor(context.getResources().getColor(R.color.primary)); + tv.setBackgroundColor(context.getResources().getColor(R.color.sejima_primary)); addContentView(tv); } diff --git a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUPageControl.java b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUPageControl.java index 53ddd2c..9a6ffdc 100644 --- a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUPageControl.java +++ b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUPageControl.java @@ -37,7 +37,7 @@ public class MUPageControl extends LinearLayout implements MUViewHelper { /** * The unactive element color */ - private int mElementColor = getResources().getColor(R.color.primary); + private int mElementColor = getResources().getColor(R.color.sejima_primary); /** * The active element width */ @@ -49,7 +49,7 @@ public class MUPageControl extends LinearLayout implements MUViewHelper { /** * The unactive element color */ - private int mActiveElementColor = getResources().getColor(R.color.accent); + private int mActiveElementColor = getResources().getColor(R.color.sejima_accent); /** * The unactive element border color */ diff --git a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUTextField.java b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUTextField.java index dd78c38..2d8e896 100644 --- a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUTextField.java +++ b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUTextField.java @@ -82,7 +82,7 @@ public class MUTextField extends RelativeLayout implements MUViewHelper { /** * Keyboard type */ - private int mKeyboardType = InputType.TYPE_NULL; + private int mKeyboardType = InputType.TYPE_CLASS_TEXT; /** * Enable/disable auto-correction */ @@ -156,6 +156,7 @@ public MUTextField(Context context, AttributeSet attrs) { mIsEditable = attributes.getBoolean(R.styleable.MUTextField_android_editable, true); mAutoCorrection = attributes.getBoolean(R.styleable.MUTextField_auto_correct, true); mKeyboardType = attributes.getInt(R.styleable.MUTextField_android_inputType, mKeyboardType); + mUnderlineColor = attributes.getColor(R.styleable.MUTextField_underline_color, mUnderlineColor); s = attributes.getString(R.styleable.MUTextField_android_hint); mPlaceHolderText = TextUtils.isEmpty(s) ? mPlaceHolderText : s; @@ -171,9 +172,8 @@ private void init(Context context){ setLayoutParams(lpRoot); // Field's label - LayoutParams lpTVLabel = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + LayoutParams lpTVLabel = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); lpTVLabel.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE); - lpTVLabel.addRule(mAlignment, RelativeLayout.TRUE); mTVLabel = new TextView(context); mTVLabel.setLayoutParams(lpTVLabel); mTVLabel.setId(View.generateViewId()); @@ -186,7 +186,6 @@ private void init(Context context){ // Input field LayoutParams lpEVInput = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); - lpEVInput.addRule(mAlignment, RelativeLayout.TRUE); lpEVInput.addRule(RelativeLayout.BELOW, mTVLabel.getId()); mETInput = new AppCompatEditText(context){ @Override @@ -329,17 +328,15 @@ public int getAlignment() { * */ public void setAlignment(int alignment) { - RelativeLayout.LayoutParams ll = (LayoutParams) mTVLabel.getLayoutParams(); - ll.removeRule(mAlignment); - ll.addRule(alignment, RelativeLayout.TRUE); - mTVLabel.setLayoutParams(ll); - if(Gravity.END == alignment){ - mETInput.setGravity(Gravity.END); + mETInput.setGravity(alignment); + mTVLabel.setGravity(alignment); } else if(Gravity.CENTER == alignment){ - mETInput.setGravity(Gravity.CENTER); + mETInput.setGravity(alignment); + mTVLabel.setGravity(alignment); } else { mETInput.setGravity(Gravity.START); + mTVLabel.setGravity(Gravity.START); } mAlignment = alignment; } @@ -472,6 +469,14 @@ public int getKeyboardType() { */ public void setKeyboardType(int keyboardType) { mKeyboardType = keyboardType; + + + + if((keyboardType & InputType.TYPE_MASK_VARIATION) == InputType.TYPE_TEXT_VARIATION_PASSWORD + || (keyboardType & InputType.TYPE_MASK_VARIATION) == InputType.TYPE_NUMBER_VARIATION_PASSWORD) { + setSecure(true); + } + mETInput.setInputType(mKeyboardType); } diff --git a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUTopBar.java b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUTopBar.java index c8c59b6..48fff1f 100644 --- a/sejima-library/app/src/main/java/com/rlab/sejima/features/MUTopBar.java +++ b/sejima-library/app/src/main/java/com/rlab/sejima/features/MUTopBar.java @@ -11,7 +11,7 @@ import android.view.Gravity; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; @@ -37,7 +37,7 @@ public class MUTopBar extends RelativeLayout implements MUViewHelper { /** * The left image button */ - private ImageButton mIBLeftButton; + private ImageView mIBLeftButton; /** * The current title @@ -67,9 +67,17 @@ public class MUTopBar extends RelativeLayout implements MUViewHelper { */ private int mButtonImage = R.drawable.ic_launcher_background; /** - * The left padding + * The left btn padding */ - private float mLeftButtonLeading = 0; + private float mLeftButtonPadding = 0; + /** + * The right btn padding + */ + private float mRightButtonPadding = 0; + /** + * The right btn padding + */ + private float mLeading = 0; /** * The left button width */ @@ -113,7 +121,9 @@ public MUTopBar(Context context, AttributeSet attrs) { mTitleAlignment = attributes.getInt(R.styleable.MUTopBar_topbar_title_alignment, mTitleAlignment); mLeftButtonWidth = attributes.getDimensionPixelSize(R.styleable.MUTopBar_topbar_img_width, 0); - mLeftButtonLeading = attributes.getDimensionPixelSize(R.styleable.MUTopBar_topbar_btn_leading, 0); + mLeftButtonPadding = attributes.getDimensionPixelSize(R.styleable.MUTopBar_topbar_btn_left_padding, 0); + mRightButtonPadding = attributes.getDimensionPixelSize(R.styleable.MUTopBar_topbar_btn_right_padding, 0); + mLeading = attributes.getDimensionPixelSize(R.styleable.MUTopBar_topbar_btn_leading, 0); mButtonImage = attributes.getResourceId(R.styleable.MUTopBar_topbar_btn_img, mButtonImage); // Font Style mFontStyle = attributes.getResourceId(R.styleable.MUTopBar_font_style, mFontStyle); @@ -131,9 +141,9 @@ private void init(Context context) { setLayoutParams(lpRoot); mLeftButtonWidth = mLeftButtonWidth != 0 ? mLeftButtonWidth : DEFAULT_BUTTON_WIDTH_IN_SP; - mIBLeftButton = new ImageButton(context); + mIBLeftButton = new ImageView(context); mIBLeftButton.setId(View.generateViewId()); - mIBLeftButton.setLayoutParams(getLeftBtnLayoutParams(mLeftButtonWidth)); + mIBLeftButton.setLayoutParams(getImgLayoutParams(mLeftButtonWidth)); setButtonImage(mButtonImage); addView(mIBLeftButton); @@ -159,17 +169,22 @@ private void init(Context context) { * Get the left padding of ImageButton * @return the left padding of image button in dp. */ - public float getLeftButtonLeading() { - return mLeftButtonLeading; + public float getLeftButtonPadding() { + return mLeftButtonPadding; } /** * Set the left padding of ImageButton - * @param leftButtonLeading the left padding of ImageButton in dp. + * @param leftButtonPadding the left padding of ImageButton in dp. */ - public void setLeftButtonLeading(float leftButtonLeading) { - mLeftButtonLeading = normalizeFloatValue(0, leftButtonLeading, leftButtonLeading); - mIBLeftButton.setLayoutParams(getLeftBtnLayoutParams(mLeftButtonWidth)); + public void setLeftButtonPadding(float leftButtonPadding) { + mLeftButtonPadding = normalizeFloatValue(0, leftButtonPadding, leftButtonPadding); + mIBLeftButton.setLayoutParams(getImgLayoutParams(mLeftButtonWidth)); + } + + public void setRightButtonPadding(float rightButtonPadding) { + mRightButtonPadding = normalizeFloatValue(0, rightButtonPadding, rightButtonPadding); + mIBLeftButton.setLayoutParams(getImgLayoutParams(mLeftButtonWidth)); } /** @@ -375,12 +390,31 @@ public void setFontStyle(int fontStyle) { } } + /** + * Hide left button image + */ + public void hideImage() { + setImageVisibility(false); + } + + /** + * Show left button image + */ + public void showImage() { + setImageVisibility(true); + } + + private void setImageVisibility(boolean visible) { + mIBLeftButton.setVisibility(visible ? VISIBLE : GONE); + } + + /** * Apply the given width on the left image button * @param width the width in dp. */ private void updateImageWidth(float width){ - mIBLeftButton.setLayoutParams(getLeftBtnLayoutParams(width)); + mIBLeftButton.setLayoutParams(getImgLayoutParams(width)); } /** @@ -388,11 +422,11 @@ private void updateImageWidth(float width){ * @param width the width in dp. * @return the layout params of the left image button. */ - private RelativeLayout.LayoutParams getLeftBtnLayoutParams(float width){ + private RelativeLayout.LayoutParams getImgLayoutParams(float width){ LayoutParams lpImBtn = new LayoutParams((int) width, (int) width); lpImBtn.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); lpImBtn.addRule(RelativeLayout.ALIGN_PARENT_START, RelativeLayout.TRUE); - lpImBtn.setMargins((int) mLeftButtonLeading, (int) mLeftButtonLeading, (int) mLeftButtonLeading, (int) mLeftButtonLeading); + lpImBtn.setMargins((int) mLeftButtonPadding, (int) mLeading, (int) mRightButtonPadding, (int) mLeading); return lpImBtn; } diff --git a/sejima-library/app/src/main/res/values/attrs.xml b/sejima-library/app/src/main/res/values/attrs.xml index ae7eab9..077007b 100644 --- a/sejima-library/app/src/main/res/values/attrs.xml +++ b/sejima-library/app/src/main/res/values/attrs.xml @@ -65,6 +65,7 @@ + @@ -85,6 +86,7 @@ + diff --git a/sejima-library/app/src/main/res/values/colors.xml b/sejima-library/app/src/main/res/values/colors.xml index 733ccc2..bf9b8dc 100644 --- a/sejima-library/app/src/main/res/values/colors.xml +++ b/sejima-library/app/src/main/res/values/colors.xml @@ -1,6 +1,6 @@ - #749D98 - #00574B - #D81B60 + #749D98 + #00574B + #D81B60