it-roy-ru.com

Android - сделать всю панель поиска кликабельной

Я использую элемент search-view в своем фрагменте для реализации функции поиска.

<SearchView
    Android:id="@+id/search_bar"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:layout_marginTop="7dp"
    Android:layout_marginLeft="7dp"
    Android:layout_marginRight="7dp"
    Android:layout_marginBottom="7dp"
    Android:background="@color/white" />

enter image description here

Проблема только в том, что значок поиска кликабелен, в другой области на панели поиска нет кликабельности, когда я щелкаю только значок, я могу искать. 

enter image description here

Можете ли вы помочь мне сделать всю область поиска кликабельной.

enter image description here

22
Saran

Что значит кликабельно? вызвать действие поиска или просто сфокусировать область редактирования? Если это первое, вы можете просто сделать иконку clickable = false. и сделать весь макет кликабельным и реализовать прослушиватель событий.

<SearchView
Android:id="@+id/search_bar"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:clickable="true"
Android:click="onClick"
Android:layout_marginTop="7dp"
Android:layout_marginLeft="7dp"
Android:layout_marginRight="7dp"
Android:layout_marginBottom="7dp"
Android:background="@color/white" />

Метод onClick должен быть

public void onClick(View v) {
   InputMethodManager im = ((InputMethodManager) getSystemService(INPUT_METHOD_SERVICE));
    im.showSoftInput(editText, 0);
}
5
Sethbrin

Это можно просто сделать, установив для Iconified значение false в OnClick of SearchView.

searchBar.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        searchBar.setIconified(false);
    }
});

Справка: Ответ Эрика Луи

Надеюсь, это поможет.

43
Zeeshan Ghazanfar
search_bar.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        search_bar.onActionViewExpanded();
    }
});
11
Lokesh Gupta

Хитрость не столько в том, чтобы сделать всю область кликабельной, сколько в том, чтобы развернуть ее, а затем спрятать клавиатуру. 

Во-первых, с вашим макетом в XML все в порядке, оставьте его как есть, в вашей Java вы хотите иметь следующее:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);

    //Define your Searchview
    SearchView searchView = (SearchView) findViewById(R.id.search_bar);

    //Turn iconified to false:
    searchView.setIconified(false);
    //The above line will expand it to fit the area as well as throw up the keyboard

    //To remove the keyboard, but make sure you keep the expanded version:
    searchView.clearFocus();
}

Это приводит к тому, что она расширяет клавиатуру на всю длину области, фокусируется на ней, что позволяет кликать по всей области, а затем удаляет клавиатуру, чтобы пользователь выглядел так, как будто он может нажать на нее. поле и поднять клавиатуру. 

Должен выполнить то, что вы ищете.

-Sil

10
Silmarilos

добавьте это в свой XML-код Android:iconifiedByDefault="false", он сохранит откройте поисковый запрос. 

и чтобы очистить его, добавьте clearfocus к вашему объекту searchview.

4
pratz9999
searchView.setIconified(false);
1
Uthaya

Использовать этот

searchView.setOnClickListener(new OnClickListener()
    {
        @Override
        public void onClick(View v)
        {
            searchView.onActionViewExpanded();
            OR
            searchView.setIconified(false);
        }
    });

    searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener()
    {
        @Override
        public void onFocusChange(View view, boolean b)
        {
            if(!b)
            {
                if(searchView.getQuery().toString().length() < 1)
                {
                    searchView.setIconified(true); //close the search editor and make search icon again
                    OR
                    searchView.onActionViewCollapsed();
                }

                searchView.clearFocus();

            }
        }
    });
0
Ali Bagheri

Напишите строки кода, приведенные ниже, в вашем файле Java:

SearchView searchView = (SearchView) findViewById(R.id.searchView);
searchView.setQueryHint("Enter your address");
searchView.setIconified(false);
searchView.clearFocus();

После этого не забудьте написать Android:focusable="true" в своем XML-файле внутри тега SearchView.

Например:

<SearchView 
Android:id="@+id/searchView" 
Android:layout_width="match_parent" 
Android:layout_height="wrap_content" 
Android:focusable="true" />
0
Pratik Adhikari