2013-07-02 8 views
1

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

public void setSubmitButtonEnabled (boolean enabled) { 

} 

Я положил setSubmitButtonEnabled в Inflater меню, как показано ниже:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.mylist, menu); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); 
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    searchView.setIconifiedByDefault(false); 

    setSubmitButtonEnabled(true); 

    return true; 
} 

Видимо, я не делаю это правильно, потому что, когда я запускаю мое приложение, я не вижу представить на экране. Что отсутствует или что не так в моем коде? Спасибо.

+0

http://developer.android.com/guide/topics /search/index.html –

+0

Вы пробовали печатать на экране поиска? Кнопка отображается только тогда, когда есть какой-то текст для поиска. – Y2i

+0

Да, я сделал, но все еще нет кнопки отправки. Или кнопка отправки должна появиться на моей клавиатуре? – androidnerd

ответ

0

Кнопка отправки отображается только в том случае, если у фокуса SearchView. Мое обходное решение для этого - использовать ActionBarSherlock (ABS) и отредактировать исходный код, чтобы можно было отображать кнопку отправки, даже если ActionBar не имеет фокуса. Чтобы сделать это, выполните следующие действия:

1. Установка ActionBarSherlock Project

Для этого перейдите по ссылке, чтобы загрузить ABS, затем в Затмения (или ваш любимый IDE), перейти к File - >New ->Project..., затем выберите Android ->Android Project from Existing Code. В следующем мастере перейдите к папке actionbarsherlock, затем нажмите «ОК», чтобы создать проект. После его создания вы можете добавить его в качестве библиотеки в свой существующий проект, перейдя на Project ->Properties ->Android, а затем внизу . Библиотека раздел, нажмите Add..., затем выберите actionbarsherlock. Наконец, нажмите OK.

2. Изменить источник

Чтобы устранить эту проблему, вам нужно отредактировать файл com.actionbarsherlock.widget.SearchView.java. После того, как открыто, перейдите к способу updateSubmitButton(boolean) и закомментировать код

&& hasFocus() 

Ваш последний метод будет выглядеть следующим образом:

private void updateSubmitButton(boolean hasText) { 
    int visibility = GONE; 
    if (mSubmitButtonEnabled && isSubmitAreaEnabled() //&& hasFocus() 
      && (hasText || !mVoiceButtonEnabled)) { 
     visibility = VISIBLE; 
    } 
    mSubmitButton.setVisibility(visibility); 
} 

Теперь сохранить, очистить свой проект и запустить - теперь вы получите результаты, которые вы хотите.

3. Документ ваши изменения (по желанию)

Вы можете документально подтвердить это изменение с помощью Modified аннотацию, например:

@Modified(author="Phil Brown", summary="Commented out '&& hasFocus()' in order to allow the submit button to be shown without focus to the view.") 
private void updateSubmitButton(boolean hasText) { 
    ... 
}