TextInputLayout中的EditText输入延迟问题

6

我有两个视图,使用了TextInputLayout。第一个是登录视图,只有2个输入字段,第二个是注册视图,有许多输入字段。我使用TextInputLayout和自定义主题的EditText/AppCompatEditText来进行输入。
问题在于,当我在我的注册界面上点击EditText时,会出现一种默认的TextInputLayout动画卡顿/波动的问题。我在LoginScreen中没有遇到这种卡顿,但我使用的代码几乎相同,所以我认为问题在于输入数量。你有什么想法或思路吗?
这是我的注册代码:

<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>

并且登录:

<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" />


1
你找到任何解决方案了吗?因为我现在也有同样的问题,在21或以下版本中运行正常,但在Marshmallow中卡顿太多了,甚至滚动也卡顿。 - Sagar Chavada
1个回答

1
我认为延迟的原因是TextInputLayout的提示动画和活动主窗口的调整同时发生(因为显示软键盘)。
在我的情况下,在清单文件中的活动标记内使用android:windowSoftInputMode="adjustNothing"就可以了,因为它使键盘出现在内容上方,而不会对活动的主窗口进行任何调整,但是您需要决定键盘是否可以覆盖TextInputLayout。
作为最后的选择,我们可以将app:hintAnimationEnabled="false"设置为TextInputLayout。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接