android - 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>
解决方案
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"
推荐阅读
- android - 我为我的计算器做了一个简单的布局。在 IDE 中看起来不错,但在我的手机上,mate 8 看起来完全不同
- pandas - 熊猫数据框重命名列
- c++11 - 返回可修改引用的 minmax
- android - 从自定义布局中的子视图读取自定义布局属性
- javascript - 隐藏和显示动画jquery
- django - Unity Web Request + Django:CSRF 令牌丢失或不正确
- css - R闪亮有条件地改变numericInput背景颜色
- javascript - 我可以在 this.classList.remove 中使用变量吗
- python - Flask-ASK 和 Amazon S3
- javascript - 如何修复移动滑块中的 x 和 y 滚动冲突?