24

我的应用程序中有一个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);
}
4

4 回答 4

48

默认情况下,SearchView 是“图标化”,它显示为放大镜图标,并且只有当用户单击该图标时,编辑字段才会展开。

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

searchView = (SearchView)findViewById(R.id.searchView);
searchView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            searchView.setIconified(false);
        }
    });
于 2015-11-10T05:08:15.283 回答
5

默认情况下,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" />

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

于 2018-09-05T10:57:18.560 回答
4

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

searchView = (SearchView)findViewById(R.id.searchView);
searchView.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        searchView.onActionViewExpanded();
    }
});
于 2017-12-15T05:37:20.060 回答
3

为了在单击整个组件时允许写入,我建议您iconifiedByDefault="false"在 xml.xml 中声明。

<SearchView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"/>
于 2018-01-12T10:49:22.627 回答