Подтвердить что ты не робот

Android Yelp как панель поиска в ActionBar

Я пытаюсь создать приложение для Android, которое выполняет несколько параметров при поиске. В настоящее время у меня есть интерфейс, доступный для поиска, и возможность поиска из моей панели действий. Тем не менее, я хочу создать вилку, например, строку поиска, где у меня есть 2 текстовых поля для ввода данных, как показано на изображении:

enter image description here

Как добавить дополнительное текстовое поле при поиске? Вот код, который я использую для инициализации поиска

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_home, menu);

    // Associate searchable configuration with the SearchView
    SearchManager searchManager =
            (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    final SearchView searchView =
            (SearchView) menu.findItem(R.id.action_search).getActionView();
    searchView.setSearchableInfo(
            searchManager.getSearchableInfo(getComponentName()));

    // set query change listener to hide keyboard after input has been
    // submitted
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
        @Override
        public boolean onQueryTextChange(String newText) {
            return false;
        }

        @Override
        public boolean onQueryTextSubmit(String query) {

            // hides and then unhides search tab to make sure keyboard
            // disappears when query is submitted
            searchView.clearFocus();
            return false;
        }
    });

и вот мое меню_layout:

<item
    android:id="@+id/action_search"
    android:title="@string/search"
    android:orderInCategory="100"
    impulz:showAsAction="always"
    impulz:actionViewClass="android.widget.SearchView"/>

<item android:id="@+id/action_settings" android:title="@string/action_settings"
    android:orderInCategory="100" impulz:showAsAction="never" />

Большое спасибо.

4b9b3361

Ответ 1

вы можете использовать actionBar.setCustomView(R.layout.custom_search); и установите actionBar программно "пользовательский вид"

вот так:

custom_search.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="right"
    android:orientation="horizontal">
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"             
    android:orientation="vertical" >
    <com.actionbarsherlock.widget.SearchView
        android:id="@+id/search1"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:iconifiedByDefault="false"
        android:visibility="invisible" />
   <com.actionbarsherlock.widget.SearchView
        android:id="@+id/search2"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:iconifiedByDefault="false"
        android:visibility="invisible" />
    </LinearLayout>
    <ImageButton
        android:id="@+id/btn_search_content"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:src="@drawable/search_content" />

</LinearLayout>

menu.xml

<item
    android:id="@+id/menu_search"
    android:icon="@drawable/red_icon"
    android:showAsAction="always"
    android:title="search" />

используйте setCustomView в свой onCreate()

MainActivity

@Override
public void onCreate(Bundle savedInstanceState) {
    // ...
    actionBar.setCustomView(R.layout.custom_search);
    actionBarCustomView = action_bar.getCustomView();
    searchView = ((SearchView)     actionBarCustomView.findViewById(R.id.search1));
    searchView2 = ((SearchView) actionBarCustomView.findViewById(R.id.search2));
    searchView.setOnCloseListener(new SearchView.OnCloseListener() {
        @Override
        public boolean onClose() {
            searchView.setVisibility(View.INVISIBLE);
            searchView2.setVisibility(View.INVISIBLE);
            return false;
        }
    });
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

        case R.id.menu_search:
            //set visibilty 
           //do what ever you want
            break;

    }
    return true;
}

Надеюсь, это сработает для вас.