XML
设计EditText和ImageButton
可考虑使用约束布局设计相应位置,此处简要设计
// EditText
<EditText
android:id="@+id/search_line"
android:layout_width="200dp"
android:layout_height="48dp"
android:drawableStart="@drawable/icon_search"
android:gravity="center_vertical|start"
android:hint="搜索"
android:textColorHint="#42000000"
android:textColor="#de000000"
android:textSize="30sp"
android:singleLine="true"
android:maxLines="1"
android:maxLength="50"/>
// ImageButton
<ImageButton
android:id="@+id/delete"
android:layout_width="20"
android:layout_height="20dp"
android:src="@drawable/search_delete"
android:visibility="invisible"/>
Activity
绑定
DataBinding数据绑定
//在build.gradle(app)文件添加
android{
dataBinding{
dataBinding = true
}
}
// 在gradle.properties中添加
android.useAndroidX=true
android.enableJetifier=true
//在Acitvity中使用时
private lateinit var binding: SearchActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.layout.search)
binding.lifecycleOwner = this
}
监听EditText内容变化
/**
* 文字监听器(EditText文本内容改变时,会触发对应的回调函数)
* beforeTextChanged() EditText文本内容更改前触onTextChanged() EditText文本内容更改时触发
* onTextChanged() EditText文本内容更改时触发
* afterTextChanged() EditText文本内容更改后触发
*/
binding.searchLine.addTextChangedListener(
object : TextWatcher {
override fun beforeTextChanged(
s: CharSequence,
start: Int,
count: Int,
after: Int) {
}
override fun onTextChanged(
s: CharSequence,
start: Int,
before: Int,
count: Int) {
}
override fun afterTextChanged(s: Editable) {
//触发事件
if(binding.searchLine.text.length > 0){
binding.delete.visibility = View.VISIBLE
}else{
binding.delete.visibility = View.INVISIBLE
}
}
}
)
清除EditText内容
binding.delete.setOnClickListener {
binding.searchEdit.text = null
}
参考: link.