Intereting Posts
Получить ультразвук от android с использованием частоты Android: Два пальца с двойным нажатием можно обнаружить с помощью GestureDetector? Как получать текстовые sms на определенный порт. Как получить доступ к API телефонных разговоров с удаленной страницы Android обновляющий адаптер работает после поворота снова устройство WindowManager.LayoutParams, почему существует метод setTitle? Android, эквивалентный программе iTunes Affiliate Program, потоковая передача музыки api и доля прибыли LibGDX шрифт FreeType размытый Как избежать обратного проектирования файла ресурсов ресурсов папок APK? Как я могу настроить тип настраиваемого аккаунта в приложении для контактов Android? Правильный способ преобразования 16-битных данных ИКМ-волны для плавания Открыть следующее действие только после того, как навигационный ящик завершает закрытие анимации Android: Можете ли вы отправлять / получать данные по телефонной линии? Как отключить звуковой динамик в android StopSelf не останавливает мое обслуживание

Как поддерживать searchItem.setOnActionExpandListener в API уровня 8+?

Я использую ActionBarActivity, Как поддерживать searchItem.setOnActionExpandListener в API 8+? В нем говорится, что для этого требуется минимальный уровень API 14.

Ниже мой код. В настоящее время я подавляю ошибку и разрешаю выполнение кода только в том случае, если API> = 14.

@SuppressLint("NewApi") public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.action_bar_home_screen, menu); searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) MenuItemCompat .getActionView(searchItem); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) { searchItem.setOnActionExpandListener(new OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { hideProgressBar(); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { showProgressBar(); selectItem(lastSelectedItemPosition); return true; } }); } } 

Используйте MenuItemCompat.setOnActionExpandListener , который является backport of OnActionExpandedListener .

Вы можете добавить ViewTreeObserver для отслеживания состояния видимости ViewTreeObserver android.support.v7.appcompat.R.id.search_edit_frame . Вы можете проверить мой ответ здесь: https://stackoverflow.com/a/28762632/1633609

Это копия моего решения из другого вопроса:

Я обнаружил, что MenuItemCompat.setOnActionExpandListener(...) не работает, если вы не проходите:

  searchItem .setShowAsAction(MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_ALWAYS); 

Но это меняет SearchView и заменяет DrawerToggle на стрелку назад.

Я хотел сохранить исходные представления и отслеживать состояние Expanded / Collapsed и использовать поддерживаемый Search View.

Решение:

Когда android.support.v7.widget.SearchView меняет состояние представления в представлении LinearLayout с идентификатором android.support.v7.appcompat.R.id.search_edit_frame , значение видимости изменяется с View.VISIBLE на View.GONE и наоборот , Поэтому я добавляю ViewTreeObserver для отслеживания изменения видимости рамки редактирования поиска.

menu_search.xml:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" android:title="@string/search" app:actionViewClass="android.support.v7.widget.SearchView" app:showAsAction="always"/> </menu> 

В деятельности:

 import android.support.v4.view.MenuItemCompat; import android.support.v7.widget.SearchView; import android.view.Menu; import android.view.MenuItem; .......... private View mSearchEditFrame; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_search, menu); MenuItem searchItem = (MenuItem) menu.findItem(R.id.action_search); SearchView searchView = (SearchView) MenuItemCompat .getActionView(searchItem); searchView.setSubmitButtonEnabled(false); mSearchEditFrame = searchView .findViewById(android.support.v7.appcompat.R.id.search_edit_frame); ViewTreeObserver vto = mSearchEditFrame.getViewTreeObserver(); vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { int oldVisibility = -1; @Override public void onGlobalLayout() { int currentVisibility = mSearchEditFrame.getVisibility(); if (currentVisibility != oldVisibility) { if (currentVisibility == View.VISIBLE) { Log.v(TAG, "EXPANDED"); } else { Log.v(TAG, "COLLAPSED"); } oldVisibility = currentVisibility; } } }); return super.onCreateOptionsMenu(menu); } 

Вы не можете этого сделать, интерфейс MenuItem.OnActionExpandListener доступен также с уровня API 14. Если ваш вопрос связан с поиском: http://developer.android.com/guide/topics/search/search-dialog.html