【问题标题】:Border around TextInputLayout view border disappears when I enable it当我启用它时,TextInputLayout 视图边框周围的边框消失了
【发布时间】:2020-06-26 16:46:04
【问题描述】:

当我将输入布局错误设置为启用时,我想要发生的事情是填充颜色变成浅红色,边框变成深阴影。

但我最终得到的是那种浅色但没有边框的东西。

这是我的布局

        <android.support.design.widget.TextInputLayout
        android:id="@+id/five_star_review_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:errorEnabled="true"
        app:hintEnabled="false"
        app:errorTextAppearance="@style/ErrorTextFiveStar"
        android:importantForAccessibility="no"
        android:labelFor="@+id/add_number"
        tools:error="true">

        <android.support.design.widget.TextInputEditText
            android:id="@+id/five_star_review_text"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:background="@drawable/border"
            android:padding="13dp"
            style="@style/StarRatingInputTextStyle"
            tools:text="I really like the video layout. It was easy to understand, and very intuitive. The invitation via email" />

这是我的代码。

 five_star_review_text.addTextChangedListener(object : TextWatcher{
        override fun afterTextChanged(s: Editable?) {
        }

        override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
        }

        override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
            if (s.length > 100) {
                five_star_review_layout.error = " "
                five_star_review_layout.boxStrokeColor= ContextCompat.getColor(activity!!, R.color.error_box_selector)
            }
            else {
                five_star_review_layout
                    .error =""
                five_star_review_layout.boxStrokeColor = ContextCompat.getColor(activity!!, R.color.error_box_selector)
            }
            if ((100 - s.length) > 0) {
                val counter = "+${100 - s.length}"
                review_counter.text = counter
                review_counter.setTextColor(ContextCompat.getColor(activity!!, R.color.black))
            } else {
                review_counter.text ="${100 - s.length}"
                review_counter.setTextColor(ContextCompat.getColor(activity!!, R.color.kp_red))
            }
        }

    })

这是我的选择器

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="true" android:color="@color/kp_red"/>
    <item android:state_hovered="true" android:color="@color/kp_red"/>
    <item android:state_focused="true" android:color="@color/kp_red"/>
    <item android:color="@color/kp_red"/>
</selector>

【问题讨论】:

    标签: android android-layout kotlin android-textinputlayout material-components-android


    【解决方案1】:

    要定义错误的笔触颜色,您可以使用 boxStrokeErrorColor 属性。 您还可以使用 app:counterEnabledapp:counterMaxLength 属性自动检测文本过长。

    <com.google.android.material.textfield.TextInputLayout
            app:boxStrokeErrorColor="@color/...."
            app:counterEnabled="true"
            app:counterMaxLength="100"
            style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
    
            <com.google.android.material.textfield.TextInputEditText
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
    
      </com.google.android.material.textfield.TextInputLayout>
    

    如果你也想改变背景颜色,你可以使用方法

    • textInputLayout.setBoxBackgroundColor
    • textInputLayout.setBoxBackgroundColorStateList
    • textInputLayout.setBoxBackgroundColorResource

    注意:这需要版本1.2.0(目前为1.2.0-beta01)。

    【讨论】:

    • 谢谢。我需要为此使用材料设计而不是普通的支持。这个答案有助于澄清。现在我没有使用 androidX,也无法升级到 androidX。我想在我的应用程序中使用这些。有可能吗?
    • boxBackgroundColorStateList 仅支持填充框。与 {@link BoxBackgroundMode#BOX_BACKGROUND_FILLED} 以外的框变体一起使用时,框背景颜色可能无法按预期工作。
    猜你喜欢
    • 2021-12-29
    • 2011-10-05
    • 2021-08-26
    • 2011-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多