输入超过TextInputLayout的counterMaxLength时的RuntimeException

时间:2016-05-24 14:28:34

标签: android android-support-library runtimeexception android-textinputlayout

我的表单中包含TextInputLayoutTextInputEditText。这是相关的XML

<android.support.design.widget.TextInputLayout
        android:id="@+id/signup_til_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/activity_horizontal_margin"
        android:hint="Name"
        app:counterEnabled="true"
        app:counterMaxLength="16"
        app:errorEnabled="true">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/signup_etext_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="@style/TextAppearance.AppCompat.Small"/>
    </android.support.design.widget.TextInputLayout>

当我尝试将第17个字符输入此字段时,我的活动会因以下堆栈跟踪而崩溃:

java.lang.RuntimeException: Failed to resolve attribute at index 3
at android.content.res.TypedArray.twGetColorStateList(TypedArray.java:438)
at android.content.res.TypedArray.getColorStateList(TypedArray.java:420)
at android.widget.TextView.setTextAppearance(TextView.java:3029)
at android.support.design.widget.TextInputLayout.updateCounter(TextInputLayout.java:688)
at android.support.design.widget.TextInputLayout.access$300(TextInputLayout.java:84)
at android.support.design.widget.TextInputLayout$1.afterTextChanged(TextInputLayout.java:248)
at android.widget.TextView.sendAfterTextChanged(TextView.java:8929)

显然它与不使用AppCompat主题有关,但我已经使用了AppCompat主题:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"/>

不确定这是否相关,但我也使用Jake Wharton的RxBinding库TextInputEditText观察此RxTextView.textChanges(nameEditText);

1 个答案:

答案 0 :(得分:3)

我建议添加另外两个属性并为其添加样式。一个是app:counterTextAppearance,另一个是app:counterOverflowTextAppearance,就像这里一样,

<android.support.design.widget.TextInputLayout
  ....
  app:counterTextAppearance="@style/counterText"
  app:counterOverflowTextAppearance="@style/counterOverride">

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

这两种风格只不过是一个android:textColor名称的项目,例如

<style name="counterText">
  <item name="android:textColor">#aa5353cc</item>
</style>

<style name="counterOverride">
  <item name="android:textColor">#ff0000</item>
</style>

请参阅完整说明here

如果这不起作用,那么我建议按照this answer中的建议,从Theme延长Theme.Design.*