输入超过TextInputLayout的counterMaxLength时会抛出RuntimeException。

3

我有一个表单,其中包含一个TextInputLayout和一个TextInputEditText。这是相应的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);


尝试将 android:textAppearance="@style/TextAppearance.AppCompat.Small" 更改为 style="@style/TextAppearance.AppCompat.Small" - Shree Krishna
@ShreeKrishna,那似乎不起作用。我也尝试完全删除styleandroid:textAppearance,但是我仍然得到相同的错误。 - Vinay Nagaraj
你尝试过移除以 app: 为前缀的每个属性吗?清理并重新构建。 - Shree Krishna
@ShreeKrishna 是的。没有骰子 =/ - Vinay Nagaraj
@ShreeKrishna 加入这两个属性就可以了,谢谢!从Theme.Design.*继承也可以。请回复此消息以便我接受它。 - Vinay Nagaraj
显示剩余2条评论
1个回答

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>

点击此处查看完整的解释。

如果无法解决问题,建议按照此答案所建议的方式扩展ThemeTheme.Design.*中选择。


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