I have two views using TextInputLayout
. The first one is a login view which has only 2 input fields and the second one is a register view which has many input fields. I am using TextInputLayout
and EditText
/AppCompatEditText
with custom themes for my inputs.
The problem is, when i click on my EditText
's in my Register screen i get a kind of lag/spikes on the default TextInputLayout
animation. I don't get the lag in my LoginScreen
but the code I'm using is quite the same, so i suppose the problem is in the number of inputs. Any idea or thoughts?
Here is my register code:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".activities.MainActivity">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/colorPrimary"
app:title="Register as shipper"
app:titleTextColor="@color/white" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/space">
<View
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true" />
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/hintTextOnLightBackgrounds"
app:hintTextAppearance="@style/TextLabel">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/fullNameEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:hint="@string/shipper_register_full_name"
android:inputType="text"
android:nextFocusLeft="@id/fullNameEdit"
android:nextFocusUp="@id/fullNameEdit"
android:theme="@style/EditText" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/hintTextOnLightBackgrounds"
app:hintTextAppearance="@style/TextLabel">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/companyNameEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:hint="@string/shipper_register_company_name"
android:theme="@style/EditText" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/hintTextOnLightBackgrounds"
app:hintTextAppearance="@style/TextLabel">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/phoneNumberEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:hint="@string/shipper_register_phone_number"
android:theme="@style/EditText"
android:inputType="phone" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/hintTextOnLightBackgrounds"
app:hintTextAppearance="@style/TextLabel">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/emailEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:hint="@string/shipper_register_email"
android:theme="@style/EditText"
android:inputType="textEmailAddress" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/hintTextOnLightBackgrounds"
app:hintTextAppearance="@style/TextLabel">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/passwordEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:hint="@string/shipper_register_password"
android:theme="@style/EditText"
android:inputType="textPassword" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/hintTextOnLightBackgrounds"
app:hintTextAppearance="@style/TextLabel">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/addressEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:hint="@string/shipper_register_address"
android:theme="@style/EditText"
android:inputType="text" />
</android.support.design.widget.TextInputLayout>
<android.support.v7.widget.AppCompatSpinner
android:id="@+id/typeSpinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp" />
<Button
android:id="@+id/registerBtn"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginBottom="5dp"
android:layout_marginTop="@dimen/space"
android:text="@string/shipper_register_register"
android:theme="@style/ButtonPrimary" />
</LinearLayout>
</ScrollView>
and the login:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/space">
<ImageView
android:layout_width="wrap_content"
android:layout_marginLeft="50dp"
android:layout_marginRight="50dp"
android:src="@drawable/logo_color"
android:layout_height="wrap_content" />
<View
android:layout_width="0px"
android:layout_height="0px"
android:focusable="true"
android:focusableInTouchMode="true" />
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/hintTextOnLightBackgrounds"
app:hintTextAppearance="@style/TextLabel">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/emailEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/login_email"
android:inputType="textEmailAddress"
android:theme="@style/EditText" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColorHint="@color/hintTextOnLightBackgrounds"
app:hintTextAppearance="@style/TextLabel">
<android.support.v7.widget.AppCompatEditText
android:id="@+id/passwordEdit"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:hint="@string/login_password"
android:inputType="textPassword"
android:theme="@style/EditText" />
</android.support.design.widget.TextInputLayout>
<Button
android:id="@+id/loginBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/login_login"
android:theme="@style/ButtonPrimary" />
<Button
android:id="@+id/shipperRegisterBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/login_register_as_shipper"
android:theme="@style/ButtonPrimary" />
<Button
android:id="@+id/carrierRegisterBtn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/login_register_as_carrier"
android:theme="@style/ButtonPrimary" />
TextInputLayout is a new element introduced in Design Support library to display the floating label in EditText. To display floating label in EditText, TextInputLayout needs to wrapped the EditText.
The TextInputLayout will show a custom icon specified by the user. Constant Value: -1 (0xffffffff) The TextInputLayout will show a dropdown button if the EditText is an AutoCompleteTextView and a Widget.MaterialComponents.TextInputLayout.
The TextInputEditText class is provided to be used as the input text child of this layout. Using TextInputEditText instead of an EditText provides accessibility support for the text field and allows TextInputLayout greater control over the visual aspects of the text field.
on the AutoCompleteTextView . The TextInputEditText class is provided to be used as the input text child of this layout. Using TextInputEditText instead of an EditText provides accessibility support for the text field and allows TextInputLayout greater control over the visual aspects of the text field.
I believe that the reason for the lag is that the hint animation of TextInputLayout and the adjustment made to the activity's main window happening at the same time (because of showing soft keyboard).
In my case using android:windowSoftInputMode="adjustNothing"
inside the activity tag in Manifest does the job, because it makes keyboard appear over the content without any adjustment made to the activity's main window, however it is up to you to decide if keyboard can overlay your TextInputLayout.
As the last option we can set app:hintAnimationEnabled="false"
to the TextInputLayout.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With