自定义SearchView整个可在android中点击

问题描述 投票:12回答:4

我的应用程序中有一个SearchView小部件,我想问一些关于使它自定义的问题。首先,您只能通过点击搜索图标开始搜索,有没有办法让整个SearchView可点击?此外,还有一种方法可以在单击时使SearchView显示为这样吗?

a busy cat http://i41.tinypic.com/rr2ow4.png![] [1]

它现在处于这种状态:

a busy cat http://i41.tinypic.com/11jlu2p.png![] [1]

这是我的代码:

    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);
    }
android android-styles searchview android-search
4个回答
27
投票

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

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

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

2
投票

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

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

2
投票

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

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

1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.