loginInputText.setError(" ERREUR&#34);给我一个错误

时间:2017-11-28 10:03:28

标签: android android-textinputlayout

我试图在我的编辑文本下显示错误,就像在Material设计中使用的那样:

 <android.support.design.widget.TextInputLayout
            android:id="@+id/login_login_input_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:theme="@style/TextLabel">

            <android.support.design.widget.TextInputEditText
                android:id="@+id/login_login_input_text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@drawable/login_edit_text_background"
                android:drawableEnd="@drawable/icone_info"
                android:drawablePadding="2dp"
                android:hint="@string/login"
                android:imeOptions="actionNext"
                android:maxLines="1"
                android:textColor="@color/colorGray"
                android:textSize="12sp" />

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

我已尝试使用loginInputText.setError("error");

loginInputLayout.setError("error");

它似乎不起作用,我已经在堆栈中看到我需要实现:

loginInputLayout.setErrorEnabled(true);

但每当我尝试使用它时,我都会收到此错误(当我尝试单独使用setError时出现同样的错误:

  FATAL EXCEPTION: main
              Process: 475, PID: 9466
              android.view.InflateException: Binary XML file line #17: Error inflating class TextView

修改

我通过以下方式获取logininputlayout和logininputtext:

 loginInputText = (TextInputEditText) findViewById(R.id.login_login_input_text);

EDIT2:

所有的依赖都在那里:

compile 'com.android.support:appcompat-v7:27.0.0'
compile 'com.android.support:design:27.0.0'

编辑3: 一旦我添加app:errorEnabled我就会收到此错误:

 android.view.InflateException: Binary XML file line #83: Error inflating class android.support.design.widget.TextInputLayout

编辑4:

我的应用主题已使用android:theme="@style/Theme.AppCompat",我的活动也会继承AppCompatActivity

编辑5:

如果我尝试使用普通EditText我会收到此错误:android.view.InflateException: Binary XML file line #17: Error inflating class TextView

编辑6:

这是我布局的主题:

<style name="TextLabel" parent="TextAppearance.AppCompat">

    <item name="android:textColorHint">@color/colorLoginGray</item>
    <item name="android:textSize">16sp</item>
    <item name="colorAccent">@color/colorLoginBlack</item>
    <item name="colorControlNormal">@color/colorTextInputGray</item>
    <item name="colorControlActivated">@color/colorLoginBlack</item>
</style>

编辑7:解决方案

添加第二个主题并从AppCompat扩展主题:

     <style name="TextLabel" parent="Theme.AppCompat">
    <!-- Hint color and label color in FALSE state -->
    <item name="android:textColorHint">@color/colorLoginGray</item>
    <item name="android:textSize">16sp</item>
    <!-- Label color in TRUE state and bar color FALSE and TRUE State -->
    <item name="colorAccent">@color/colorLoginBlack</item>
    <item name="colorControlNormal">@color/colorTextInputGray</item>
    <item name="colorControlActivated">@color/colorLoginBlack</item>
</style>

<style name="TextLabelError" parent="Theme.AppCompat">
    <item name="android:textColor">@color/errorRed</item>

</style>

并在xml中:

        <android.support.design.widget.TextInputLayout
            android:id="@+id/login_login_input_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:theme="@style/TextLabel"
            app:errorTextAppearance="@style/TextLabelError"
            >

2 个答案:

答案 0 :(得分:2)

试试这个

<android.support.design.widget.TextInputLayout
    android:id="@+id/text_input_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:errorEnabled="true">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter your name" />

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

TextInputLayout til = (TextInputLayout) findViewById(R.id.text_input_layout);
til.setError("Text");

答案 1 :(得分:1)

TextInputLayout

 <android.support.design.widget.TextInputLayout
            android:id="@+id/userPasswordTIL"
            android:layout_width="match_parent"
            android:layout_height="55dp"
            android:layout_marginTop="5dp"
            android:clipToPadding="false"
            android:gravity="bottom"
            android:paddingTop="4dp"
            android:theme="@style/Theme.AppCompat"
            android:textColorHint="@color/white"
            >

            <EditText
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="bottom"
                android:hint="Password"
                android:inputType="textPassword"
                android:maxLength="10"
                android:paddingLeft="17dp"
                android:paddingRight="17dp"
                android:paddingTop="8dp"
                android:singleLine="true"
                android:textColor="@color/white"
                android:textColorHint="@color/white"
                />
        </android.support.design.widget.TextInputLayout>

然后

userPasswordTIL = (TextInputLayout) findViewById(R.id.userPasswordTIL);
userPasswordTIL.setError("Required"); #1 pic result

             OR

userPasswordTIL.getEditText().setError("Required"); #2 pic result

#1 result #2 result