2015-09-01 2 views
8

Теперь у меня есть следующий код:Как добавить кнопки для поиска в панели инструментов Android?

@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_toolbar_reader, menu); 

    MenuItem searchItem = menu.findItem(R.id.action_search); 
    SearchView searchView = (SearchView) searchItem.getActionView(); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    if(null!=searchManager) { 
     searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    } 
    searchView.setIconifiedByDefault(false); 
    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      return false; 
     } 
    }); 
    return true; 
} 

Я хочу, чтобы прикрепить к поиску вид кнопки поиска следующий и предыдущий поиск (поиск в WebView). е. г. Я хочу получить это (стрелка в виде стрелки должна появляться только в том случае, если searchView не упакован): example

Как это сделать?

ответ

6

Итак, я решил его с помощью этого кода в моей деятельности:

@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_toolbar_reader, menu); 


    final MenuItem searchItem = menu.findItem(R.id.action_search); 
    SearchView searchView = (SearchView) searchItem.getActionView(); 

    LayoutParams navButtonsParams = new LayoutParams(toolbar.getHeight() * 2/3, toolbar.getHeight() * 2/3); 

    Button btnNext = new Button(this); 
    btnNext.setBackground(getResources().getDrawable(R.drawable.ic_keyboard_arrow_down_white_48pt_3x)); 

    Button btnPrev = new Button(this); 
    btnPrev.setBackground(getResources().getDrawable(R.drawable.ic_keyboard_arrow_up_white_48pt_3x)); 

    searchStats = new TextView(this); 

    ((LinearLayout) searchView.getChildAt(0)).addView(searchStats); 
    ((LinearLayout) searchView.getChildAt(0)).addView(btnPrev, navButtonsParams); 
    ((LinearLayout) searchView.getChildAt(0)).addView(btnNext, navButtonsParams); 

    ((LinearLayout) searchView.getChildAt(0)).setGravity(Gravity.BOTTOM); 

    searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      searchQuery = newText; 
      if (!newText.equals("")) { 
       lawTextWebView.findAllAsync(newText); 
      } else { 
       lawTextWebView.clearMatches(); 
      } 
      return false; 
     } 
    }); 

    btnNext.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!searchQuery.equals("")) { 
       lawTextWebView.findNext(true); 
      } 
     } 
    }); 

    btnPrev.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (!searchQuery.equals("")) { 
       lawTextWebView.findNext(false); 
      } 
     } 
    }); 

    return true; 
} 

и сохранение этой ActionBar разметке Рез/меню/menu_toolbar_reader.xml:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:yourapp="http://schemas.android.com/apk/res-auto"> 

<item 
    android:id="@+id/action_search" 
    android:title="@android:string/search_go" 
    android:icon="@drawable/abc_ic_search_api_mtrl_alpha" 
    yourapp:showAsAction="always|collapseActionView" 
    yourapp:actionViewClass="android.support.v7.widget.SearchView" /> 

<item 
    android:id="@+id/action_contents" 
    android:title="@string/contents" 
    android:icon="@drawable/abc_ic_menu_moreoverflow_mtrl_alpha" 
    yourapp:showAsAction="always" /> 
</menu> 
Смежные вопросы