TextInputLayout: 添加的EditText不是TextInputEditText类,请改用该类。

5

经常收到这个警告 TextInputLayout:添加的EditText不是TextInputEditText。请改用该类,第一次没有完成活动。 第二次不会收到警告并且活动完美结束。

activity_login.xml

<LinearLayout
        android:id="@+id/ll_login_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:visibility="visible">


        <android.support.design.widget.TextInputLayout
            android:id="@+id/email_field"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:paddingBottom="16dp"
            android:hint="@string/email_phone"
            android:paddingTop="48dp">

            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/et_email"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:inputType="textEmailAddress"
                android:paddingEnd="0dp"
                android:paddingStart="8dp" />

        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:id="@+id/password_field"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/password"
            android:paddingBottom="16dp">

            <android.support.v7.widget.AppCompatEditText
                android:id="@+id/et_password"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:inputType="textPassword"
                android:paddingEnd="0dp"
                android:paddingStart="8dp" />

        </android.support.design.widget.TextInputLayout>


        <Button
            android:id="@+id/btn_login"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginEnd="@dimen/button_login_social_margin"
            android:layout_marginStart="@dimen/button_login_social_margin"
            android:layout_marginBottom="@dimen/activity_vertical_margin"
            android:text="@string/login"
            android:textColor="@android:color/black" />

    </LinearLayout>

LoginActivity.java

    public class LoginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);

        final AppCompatEditText etEmailOrPh = (AppCompatEditText) findViewById(R.id.et_email);
        final AppCompatEditText etPassword = (AppCompatEditText) findViewById(R.id.et_password);
        final Button btnLogin = (Button) findViewById(R.id.btn_login);

        assert etEmailOrPh != null;
        assert etPassword != null;
        assert  btnLogin != null;

        btnLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String emailOrPhone = etEmailOrPh.getText().toString().trim();
                String password = etPassword.getText().toString().trim();

                if(emailOrPhone.isEmpty()){
                    etEmailOrPh.setError(getResources().getString(R.string.email_phone_mandatory));
                    etEmailOrPh.requestFocus();
                } else if(emailOrPhone.contains("@") && CommonUtil.isValidEmail(emailOrPhone)) {
                    etEmailOrPh.setError(getResources().getString(R.string.email_error));
                    etEmailOrPh.requestFocus();
                } else if(password.isEmpty()) {
                    etPassword.setError(getResources().getString(R.string.password_mandatory));
                    etPassword.requestFocus();
                } else {
                    SharedPreferences cache = LoginActivity.this.getSharedPreferences(Constants.SHARED_PREF_NAME, Context.MODE_PRIVATE);
                    final SharedPreferences.Editor preferenceEditor = cache.edit();
                    preferenceEditor.putInt(Constants.SHARED_PREF_ITEM_USER_ID, 1);
                    preferenceEditor.apply();
                    setResult(RESULT_OK);
                    finish();
                }
            }
        });

    }
}

Login Screen


所以,只需使用android.support.design.widget.TextInputEditText而不是AppCompatEditText。除非有一些我没有看到的原因。 - Mike M.
我已经尝试过了,问题依旧。 - Naveen Kumar M
请确保更改所有 TextInputLayout 中的内容,然后进行清理和重建。如果问题仍然存在,您需要更好地解释“未完成 Activity”具体指什么。 - Mike M.
@Ironman,我应用了你的答案后没有出现警告。但是当我按下btnLogin时,它会清除所有文本值,而不是finish()这个活动。但是数据已保存在共享首选项中。当我再次尝试相同操作时,它将完成此活动。但并非每一次都是第一次。 - Naveen Kumar M
http://stackoverflow.com/documentation/android/5652/textinputlayout/20044/textinputedittext#t=201609231239581705656 - Gabriele Mariotti
显示剩余3条评论
2个回答

10

修改这个EditText

android.support.v7.widget.AppCompatEditText

对于这个

android.support.design.widget.TextInputEditText

完整代码:

<android.support.design.widget.TextInputLayout
       android:id="@+id/email_field"
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:paddingBottom="16dp"
       android:hint="@string/email_phone"
       android:paddingTop="48dp">

    <android.support.design.widget.TextInputEditText
            android:id="@+id/et_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:inputType="textEmailAddress"
            android:paddingEnd="0dp"
            android:paddingStart="8dp"
        />
</android.support.design.widget.TextInputLayout>

警告已清除,但第一次未完成活动。第二次登录才能完成。 - Naveen Kumar M
抱歉,活动已经打开两次。现在已解决。谢谢,您的解决方案有效。 Intent intent = new Intent(MapActivity.this, LoginActivity.class); startActivityForResult(intent, Constants.REQUEST_CODE_LOGIN); startActivity(intent); - Naveen Kumar M
@NaveenKumarM 很高兴能帮助你。 - Harshad Pansuriya
如果您已更新至sdk-28并且针对Android P进行目标设置,则需要使用android-x包'com.google.android.material.textfield.TextInputEditText'。 - Johnny

1
尝试不使用


<android.support.v7.widget.AppCompatEditText

请使用 "

而不是使用

"。
<EditText

所以你将得到:
<EditText
            android:id="@+id/et_email"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:inputType="textEmailAddress"
            android:paddingEnd="0dp"
            android:paddingStart="8dp" />

在研究了这个问题后,我找到了这篇文章:

添加的EditText不是TextInputEditText。请改用该类。

如果有帮助,请告诉我。


在使用<EditText时也出现了相同的问题。 - Naveen Kumar M

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