diff --git a/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java b/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java
index aafc9a4..19db1ae 100644
--- a/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java
+++ b/floatinghintedittext/src/main/java/com/thebnich/floatinghintedittext/FloatingHintEditText.java
@@ -2,10 +2,13 @@
import android.content.Context;
import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Paint.FontMetricsInt;
+import android.os.Bundle;
+import android.os.Parcelable;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.TypedValue;
@@ -14,6 +17,13 @@
public class FloatingHintEditText extends EditText {
private static enum Animation { NONE, SHRINK, GROW }
+ public static final String ARG_SUPER_STATE = "arg_super_state";
+ public static final String ARG_TEXT_CHANGED_STATE= "arg_text_changed_state";
+
+ private static final int DEFAULT_DIVIDE_PADDING = 5;
+ private static final int DEFAULT_ANIMATION_STEPS = 6;
+ private static final float DEFAULT_HINT_SCALE = 0.6f;
+
private final Paint mFloatingHintPaint = new Paint();
private final ColorStateList mHintColors;
private final float mHintScale;
@@ -21,6 +31,7 @@ private static enum Animation { NONE, SHRINK, GROW }
private boolean mWasEmpty;
private int mAnimationFrame;
+ private int mLabelPadding;
private Animation mAnimation = Animation.NONE;
public FloatingHintEditText(Context context) {
@@ -34,10 +45,16 @@ public FloatingHintEditText(Context context, AttributeSet attrs) {
public FloatingHintEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
- TypedValue typedValue = new TypedValue();
- getResources().getValue(R.dimen.floatinghintedittext_hint_scale, typedValue, true);
- mHintScale = typedValue.getFloat();
- mAnimationSteps = getResources().getInteger(R.dimen.floatinghintedittext_animation_steps);
+ int defaultLabelPadding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, DEFAULT_DIVIDE_PADDING, getResources().getDisplayMetrics());
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FloatLabelView);
+ try {
+ mLabelPadding = a.getDimensionPixelOffset(R.styleable.FloatLabelView_dividePadding, defaultLabelPadding);
+ mAnimationSteps = a.getInt(R.styleable.FloatLabelView_animationSteps, DEFAULT_ANIMATION_STEPS);
+ mHintScale = a.getFloat(R.styleable.FloatLabelView_hintScale, DEFAULT_HINT_SCALE);
+ } finally {
+ a.recycle();
+ }
mHintColors = getHintTextColors();
mWasEmpty = TextUtils.isEmpty(getText());
@@ -46,7 +63,7 @@ public FloatingHintEditText(Context context, AttributeSet attrs, int defStyle) {
@Override
public int getCompoundPaddingTop() {
final FontMetricsInt metrics = getPaint().getFontMetricsInt();
- final int floatingHintHeight = (int) ((metrics.bottom - metrics.top) * mHintScale);
+ final int floatingHintHeight = (int) ((metrics.bottom - metrics.top) * mHintScale) + mLabelPadding;
return super.getCompoundPaddingTop() + floatingHintHeight;
}
@@ -97,7 +114,7 @@ protected void onDraw(Canvas canvas) {
final float hintPosX = getCompoundPaddingLeft() + getScrollX();
final float normalHintPosY = getBaseline();
- final float floatingHintPosY = normalHintPosY + getPaint().getFontMetricsInt().top + getScrollY();
+ final float floatingHintPosY = normalHintPosY + getPaint().getFontMetricsInt().top + getScrollY() - mLabelPadding;
final float normalHintSize = getTextSize();
final float floatingHintSize = normalHintSize * mHintScale;
@@ -130,7 +147,7 @@ protected void onDraw(Canvas canvas) {
}
private void drawAnimationFrame(Canvas canvas, float fromSize, float toSize,
- float hintPosX, float fromY, float toY) {
+ float hintPosX, float fromY, float toY) {
final float textSize = lerp(fromSize, toSize);
final float hintPosY = lerp(fromY, toY);
mFloatingHintPaint.setTextSize(textSize);
@@ -141,4 +158,19 @@ private float lerp(float from, float to) {
final float alpha = (float) mAnimationFrame / (mAnimationSteps - 1);
return from * (1 - alpha) + to * alpha;
}
-}
+
+ @Override
+ public Parcelable onSaveInstanceState() {
+ Bundle bundle = new Bundle();
+ bundle.putParcelable(ARG_SUPER_STATE, super.onSaveInstanceState());
+ bundle.putBoolean(ARG_TEXT_CHANGED_STATE, mWasEmpty);
+ return bundle;
+ }
+
+ @Override
+ public void onRestoreInstanceState(Parcelable state) {
+ Bundle bundle = (Bundle) state;
+ mWasEmpty = bundle.getBoolean(ARG_SUPER_STATE);
+ super.onRestoreInstanceState(bundle.getParcelable(ARG_TEXT_CHANGED_STATE));
+ }
+}
\ No newline at end of file
diff --git a/floatinghintedittext/src/main/res/values/attrs.xml b/floatinghintedittext/src/main/res/values/attrs.xml
index 03ea9ec..1dd24fc 100644
--- a/floatinghintedittext/src/main/res/values/attrs.xml
+++ b/floatinghintedittext/src/main/res/values/attrs.xml
@@ -1,4 +1,9 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/floatinghintedittext/src/main/res/values/dimens.xml b/floatinghintedittext/src/main/res/values/dimens.xml
deleted file mode 100644
index 91c7713..0000000
--- a/floatinghintedittext/src/main/res/values/dimens.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
- - 0.6
- - 6
-
-