Центр поиска в панели действий - программирование
Подтвердить что ты не робот

Центр поиска в панели действий

Как я могу центрировать ActionView (в частности, SearchView) внутри панели действий?

Как видно из приложения Google Книги:

Google Books app SearchView

Моя текущая настройка макета (search_layout.xml):

<?xml version="1.0" encoding="utf-8"?>
<SearchView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:queryHint="@string/search_hint" />

XML файл My Action Bar (menu.xml):

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:icon="@+android:drawable/ic_menu_search"
        android:title="@string/search"
        android:showAsAction="always|collapseActionView"
        android:id="@+id/searchMenuItem"
        android:actionLayout="@layout/search_layout" />
</menu>

Есть ли способ имитировать поведение SearchView для книг?

4b9b3361

Ответ 1

Насколько я могу сказать, в xml menu не может быть достигнуто с помощью Action Items в xml menu. Однако это может быть реализовано путем установки пользовательского макета на ActionBar. Основной пример:

An Activity:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar actionBar = getActionBar();
        actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
        actionBar.setDisplayShowHomeEnabled(true);
        actionBar.setCustomView(R.layout.actionbar_layout);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}

где actionbar_layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <SearchView
        android:id="@+id/mySearchView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:iconifiedByDefault="false" />
</RelativeLayout>

создает это на 7-дюймовом планшете:

enter image description here

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

Ответ 2

Посмотрите здесь. Вы можете просто использовать атрибут android: actionViewclass= "android.widget.SearchView", и это должно работать нормально (помните, что вы можете получить ссылку на searchView в Java и изменить подсказку там, если это то, что вы хотите).