Персонализирано търсене. Преглед на целия, върху който може да се кликне в android

Имам приспособление 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);
}

person Anhayt Ananun    schedule 16.07.2013    source източник
comment
Добре, първият проблем беше разрешен с помощта на citySearch-s setOnClickListener.   -  person Anhayt Ananun    schedule 16.07.2013
comment
Трябва да отговорите на този въпрос с вашия коментар...той реши проблема ми   -  person coder    schedule 11.11.2014
comment
@AnhaytAnanun Решихте ли тези проблеми сега? Ако е така какво е решението? Можете ли да споделите решението... Може да ни помогне и на нас   -  person Muralidharan Kathiresan    schedule 27.05.2015
comment
@AnhaytAnanun отметнете отговора. Така е правилно.   -  person the_prole    schedule 27.10.2016


Отговори (4)


По подразбиране SearchView е „иконизиран“, което се показва като икона на лупа и само ако потребителят щракне върху иконата, полето за редактиране се разширява.

За да позволите на потребителя да щракне навсякъде в SearchView и да разшири полето за въвеждане. Просто трябва да добавим слушател на кликване и да извикаме setIconified(false), когато потребителят кликне.

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

По подразбиране 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" />

тези 2 начина са правилни, но се различават в показването на иконите.

person roghayeh hosseini    schedule 05.09.2018

Друг лесен начин да го направите, като зададете onActionViewExpanded().

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

За да позволите писане при щракване в целия компонент, бих ви препоръчал да декларирате iconifiedByDefault="false" в xml.

<SearchView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:iconifiedByDefault="false"/>
person jordivilagut    schedule 12.01.2018
comment
Това е отговорът, който търсех. Просто трябваше да добавя android:focusableInTouchMode="true" към оформлението, за да се отърва от първоначалния фокус върху Searchview. - person Petr Kramolis; 24.04.2018