android中的自定义搜索视图可点击

android中的自定义搜索视图可点击,android,android-styles,searchview,android-search,Android,Android Styles,Searchview,Android Search,我的应用程序中有一个SearchView小部件,我想问一些关于定制它的问题。首先,您只能通过单击搜索图标开始搜索,有没有办法使整个SearchView可单击? 另外,是否有一种方法可以使SearchView在单击时显示类似的内容 它现在处于以下状态: 这是我的密码: citySearch = (SearchView) findViewById(R.id.city_search_bar); citySearch.setBackgroundResource(R.drawable.search

我的应用程序中有一个
SearchView
小部件,我想问一些关于定制它的问题。首先,您只能通过单击搜索图标开始搜索,有没有办法使整个
SearchView
可单击? 另外,是否有一种方法可以使
SearchView
在单击时显示类似的内容

它现在处于以下状态:

这是我的密码:

citySearch = (SearchView) findViewById(R.id.city_search_bar);
citySearch.setBackgroundResource(R.drawable.search_background);
citySearch.setOnSearchClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        citySearch.setIconifiedByDefault(true);
        //citySearch.setIconified(true);
    }

});
citySearch.setOnQueryTextListener(new OnQueryTextListener() {

    @Override
    public boolean onQueryTextChange(String text) {

        ((Filterable) cityListView.getAdapter()).getFilter().filter(text);

        return false;
    }

    @Override
    public boolean onQueryTextSubmit(String text) {

        return false;
    }

});

try
{
    Field searchField = SearchView.class.getDeclaredField("mSearchButton");
    searchField.setAccessible(true);
    ImageView searchBtn = (ImageView)searchField.get(citySearch);
    searchBtn.setImageResource(R.drawable.search_icon);
    searchBtn.setScaleType(ScaleType.FIT_CENTER);
    searchPlate.setBackgroundResource(R.drawable.search_background);
}
catch (NoSuchFieldException e)
{
    Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}
catch (IllegalAccessException e)
{
    Log.e("SEARCHSTYLEERROR",e.getMessage(),e);
}

默认情况下,SearchView为“图标化”,显示为放大镜图标,仅当用户单击图标时,编辑字段才会展开

使用户可以单击SearchView上的任意位置并展开输入字段。我们只需要添加一个click侦听器,并在用户单击时调用setIconified(false)

searchView = (SearchView)findViewById(R.id.searchView);
searchView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            searchView.setIconified(false);
        }
    });

另一种简单的方法是设置
onActionViewExpanded()


为了允许在单击整个组件时进行写入,我建议您在xml上声明
iconifiedByDefault=“false”

<SearchView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"/>


默认情况下,SearchView为“图标化”。 因此,您应该在java中使用以下代码:

SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchView.setIconified(false);
    }
});
或者在xml中使用:

<SearchView
        android:id="@+id/searchView"
        android:iconifiedByDefault="false" />


这两种方法是正确的,但图标显示不同。

好的,第一个问题是使用citySearch-s setOnClickListener解决的。您应该用您的评论回答这个问题……它解决了我的问题issue@AnhaytAnanun你现在解决这些问题了吗?如果是,解决办法是什么?你能分享解决方案吗。。。这可能对我们有帮助too@AnhaytAnanun勾选答案。这是正确的。这是我一直在寻找的答案。我只需要在布局中添加
android:focusableInTouchMode=“true”
,以摆脱最初对Searchview的关注。
<SearchView
        android:id="@+id/searchView"
        android:iconifiedByDefault="false" />