package ca.josephroque.bowlingcompanion.view; import android.content.Context; import android.graphics.Canvas; import android.support.design.widget.TextInputLayout; import android.support.v4.view.ViewCompat; import android.text.TextUtils; import android.util.AttributeSet; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; /** * Fixes a bug where {@link TextInputLayout} does not display hint before {@link EditText} is focused. Retrieved from * https://gist.github.com/ljubisa987/e33cd5597da07172c55d */ public class CustomTextInputLayout extends TextInputLayout { /** To identify output from this class in the Logcat. */ @SuppressWarnings("unused") private static final String TAG = "TextInputLayout"; /** If hint is set. */ private boolean mIsHintSet; /** Hint of the text input layout. */ private CharSequence mHint; /** * Default constructor. Passes parameter to super constructor. * * @param context context */ public CustomTextInputLayout(Context context) { super(context); } /** * Default constructor. Passes parameters to super constructor. * * @param context context * @param attrs attributes */ public CustomTextInputLayout(Context context, AttributeSet attrs) { super(context, attrs); } @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { if (child instanceof EditText) { // Since hint will be nullify on EditText once on parent addView, store hint value // locally mHint = ((EditText) child).getHint(); } super.addView(child, index, params); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (!mIsHintSet && ViewCompat.isLaidOut(this) && getEditText() != null) { // We have to reset the previous hint so that equals check pass setHint(null); // In case that hint is changed programmatically CharSequence currentEditTextHint = getEditText().getHint(); if (!TextUtils.isEmpty(currentEditTextHint)) { mHint = currentEditTextHint; getEditText().setHint(""); } setHint(mHint); mIsHintSet = true; } } }