ActionBar SearchView не полностью расширяется в ландшафтном режиме

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

Есть ли способ установить параметры макета расширения в SearchView, чтобы полностью заполнить панель действий, когда пользователь вводит поиск?

См. Изображение: http://i.imgur.com/3z8ZbJA.png

Примечание: в настоящее время я не использую ActionBar Sherlock

Edit: Вот что я сделал, чтобы увеличить ширину.

searchView.setOnSearchClickListener(new OnClickListener() { private boolean extended = false; @Override public void onClick(View v) { if (!extended) { extended = true; LayoutParams lp = v.getLayoutParams(); lp.width = LayoutParams.MATCH_PARENT; } } }); 

Вы попробовали что-то подобное?

 editView.setOnKeyListener(new OnKeyListener() { private boolean extended = false; @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (!extended && event.getAction() == KeyEvent.ACTION_DOWN) { extended = true; LayoutParams lp = v.getLayoutParams(); lp.width = LayoutParams.MATCH_PARENT; } return false; } }); 

В SearchView MenuItemCompat есть свойство с именем maxWidth.

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

Используйте ширину экрана вместо xxx offcourse

Я выяснил решение для полного расширения вида поиска в ландшафте, а также чтобы представление действий уже было расширено при создании активности. Вот как это работает:

1. Сначала создайте xml-файл в папке res-menu, например: searchview_in_menu.xml. Здесь у вас будет следующий код:

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

Примечание: «@ string / search» – выглядит примерно так в res-strings.xml:

  <string name="search">Search</string> 

2. Внедрите созданный макет, указанный выше («@ layout / searchview_layout») в папке res-layout. Новый макет: searchview_layout.xml будет выглядеть так:

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

Примечание. Здесь мы устанавливаем ширину окна поиска в соответствии с шириной своего родителя (android: layout_width = "match_parent").

3. В вашем классе MainActivity или в действии, которое должно реализовать Search View, напишите в методе onCreateOptionsMenu () следующий код:

 @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.searchview_in_menu, menu); //find the search view item and inflate it in the menu layout MenuItem searchItem = menu.findItem(R.id.action_search); mSearchView = (SearchView) searchItem.getActionView(); //set a hint on the search view (optional) mSearchView.setQueryHint(getString(R.string.search)); //these flags together with the search view layout expand the search view in the landscape mode searchItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_ALWAYS); //expand the search view when entering the activity(optional) searchItem.expandActionView(); return true; } 

Отрегулируйте параметр макета ширины для MATCH_PARENT , таким образом, SearchView будет полностью расширяться как в портретной, так и в альбомной SearchView

 ViewGroup.LayoutParams layoutParams = mSearchView.getLayoutParams(); layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT; 

Для ActionBarCompat используйте это:

  MenuItemCompat.setShowAsAction(searchItem, MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItem.SHOW_AS_ACTION_ALWAYS); MenuItemCompat.expandActionView(searchItem); 

Используйте это (100%):

 mSearchView = (SearchView) searchItem.getActionView(); mSearchView.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); 
Intereting Posts
Как вы устанавливаете ширину линии при рисовании на Android? Как получить следующий поворотный пункт с google map – (Android) Альтернатива Proguard для запутывания приложений для Android с использованием предварительно скомпилированных сторонних библиотек В-биллинг безопасности в приложении – в чем дело с запутывающим ключом? Обновить интерфейс пользователя из AsyncTaskLoader Почему Google выбрал RenderScript вместо OpenCL Android – создайте LinearLayout, который содержит прокручиваемый ListView Navbar перекрывает последний элемент списка ListView (Android) Изменить значок ActionBar Home / Up Arrow Поддержка других протоколов в веб-браузере Android Загрузка программного обеспечения на Google Диск программно (Android API) Получение «E / TokenRequestor: у вас неправильные конфигурации, связанные с OAuth2. Подробная ошибка: INVALID_AUDIENCE 'даже после предоставления точных идентификаторов клиентов Нужна ли проверка выполнения во время выполнения для записи в путь getExternalFilesDir () в зефире? Как оживить добавление или удаление строк ListView Android Ошибка Android «Попытка использования переработанного растрового изображения»?