首页 > 解决方案 > TextInputLayout 侦听器不适用于更高版本的 API 28

问题描述

我尝试在 textInputLayout 上设置 setOnFocusChangeListener。它在高于 28 的 API 上运行良好。此外,setOnClickListener 不适用于高于 28 的 API。如何在高于 28 的 API 上修复它?我的代码:

  with(binding) {
            textFieldSearch.setOnFocusChangeListener { v, hasFocus ->
                Log.d(javaClass.simpleName,"SetOn: Focus")
                if (hasFocus) {
                    textFieldSearch.setStartIconDrawable(android.R.drawable.ic_menu_search)
                    tabLayout.visibility = View.VISIBLE
                    viewpager.visibility = View.VISIBLE
                    popularSearchLay.container.visibility = View.GONE
                } else {
                    textFieldSearch.setStartIconDrawable(R.drawable.ic_arrow_arrows_back)
                    tabLayout.visibility = View.GONE
                    viewpager.visibility = View.GONE
                    popularSearchLay.container.visibility = View.VISIBLE
                }
            }
}

我的布局:

  <com.google.android.material.textfield.TextInputLayout
            android:id="@+id/textFieldSearch"
            style="@style/CustomTextInputLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusableInTouchMode="true"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_scrollFlags="scroll|enterAlways">

            <com.google.android.material.textfield.TextInputEditText
                android:id="@+id/textInputSearch"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:drawablePadding="@dimen/edit_text_hint_padding"
                android:imeOptions="actionSearch"
                android:inputType="textFilter" />
        </com.google.android.material.textfield.TextInputLayout>

我的风格:

   <style name="CustomTextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
        <item name="boxCornerRadiusTopStart">@dimen/searchViewCornerRadius</item>
        <item name="boxCornerRadiusBottomEnd">@dimen/searchViewCornerRadius</item>
        <item name="boxCornerRadiusTopEnd">@dimen/searchViewCornerRadius</item>
        <item name="boxCornerRadiusBottomStart">@dimen/searchViewCornerRadius</item>
        <item name="borderWidth">@dimen/searchViewBorderWidth</item>
        <item name="boxStrokeColor">@color/black</item>
        <item name="android:layout_margin">@dimen/textFieldMargin</item>
        <item name="android:hint">@string/hint_edit_text</item>
        <item name="hintTextColor">@color/black</item>
        <item name="endIconMode">clear_text</item>
        <item name="startIconDrawable">@android:drawable/ic_menu_search</item>
    </style>

标签: androiduser-interfaceandroid-textinputedittext

解决方案


         textinputSearch.setOnFocusChangeListener { v, hasFocus ->
            Log.d(javaClass.simpleName,"SetOn: Focus")
            if (!hasFocus) {
                textinputSearch.setStartIconDrawable(android.R.drawable.ic_menu_search)
                tabLayout.visibility = View.VISIBLE
                viewpager.visibility = View.VISIBLE
                popularSearchLay.container.visibility = View.GONE
            } else {
                textFieldSearch.setStartIconDrawable(R.drawable.ic_arrow_arrows_back)
                tabLayout.visibility = View.GONE
                viewpager.visibility = View.GONE
                popularSearchLay.container.visibility = View.VISIBLE
            }
        }

在你的文本输入中使用这个样式

style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"

推荐阅读