我在上设置了SearchView
android:iconifiedByDefault="false";
我想跟踪用户第一次打开搜索栏的时间(键盘弹出的那一刻(
这不起作用:
searchView = findViewById(R.id.search_bar);
searchView.setOnSearchClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("###", "Clicked");
}
});
上面的代码只有在搜索栏被图标化时才有效。我不想要一个图标化的搜索栏,我的搜索栏应该像带有queryHint的Instagram搜索栏一样;在此处搜索">
这是我的XML:
<androidx.appcompat.widget.SearchView
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
app:defaultQueryHint="Search here"/>
我做错了什么?
编辑
我还尝试实现onTouchListener:
searchView = findViewById(R.id.search_bar);
searchView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
Log.i("###", "Clicked ");
return true;
}
});
但它是一样的,只有当点击搜索图标时才有效。
尝试setOnTouchListener
这里我提供的是kotlin代码,您也可以在java中实现类似的代码。
searchView.setOnTouchListener(object : View.OnTouchListener{
override fun onTouch(v : View?, event : MotionEvent?) : Boolean {
Log.i("tag","test")
return true
}
})
我建议尝试setOnFocusChangeListener
,并在searchView
中将可聚焦属性设置为true
。
代码(它是Kotlin-我没有java文件rn,但你可以很容易地自动转换它。我尽可能地保持它像java一样(:
searchView?.setOnFocusChangeListener(object: View.OnFocusChangeListener {
override fun onFocusChange(v: View?, hasFocus: Boolean) {
// do fancy stuff
}
})
和xml:
<androidx.appcompat.widget.SearchView
android:id="@+id/search_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:focusable="true"
app:defaultQueryHint="Search here"/>
此外,还有一点需要注意的是:尽管它与问题无关,但很多人可能会被这个问题绊倒,困惑于为什么当你开始搜索时onSearchClick
没有被执行:函数setOnQueryTextListener
因此存在。当你想注册文本中的更改时,你也可以使用它,而不仅仅是打开键盘。