Android appcompat API 10 свернуть вид действия

В настоящее время я разрабатываю приложение для Android, которое должно поддерживать Api10 +. Я следовал за множеством руководств, чтобы установить appcompat для создания панели действий.

Ссылки: https://stackoverflow.com/a/21291156/2789106 http://developer.android.com/guide/topics/ui/actionbar.html

Есть только три вещи, которые я не могу сделать.

  1. Когда поиск открывается, поисковая лупа НЕ изменяет на набор, который я могу установить.
  2. Я не могу изменить значок «назад» (кнопка «вверх» вверх, слева от логотипа (это отличный образ, чем тот, который я передал при создании drawerToggle ))
  3. Я не могу программно закрыть (свернуть) вид действия, когда нажата клавиша Поиск. (Вызов collapseActionView() был реализован в API 14)

Вот мой код:

 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // ActionBarDrawerToggle ties together the the proper interactions // between the sliding drawer and the action bar app icon mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, R.drawable.ic_navigation_drawer, R.string.navigation_drawer_open, R.string.navigation_drawer_close) { /** Called when a drawer has settled in a completely closed state. */ public void onDrawerClosed(View view) { supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } /** Called when a drawer has settled in a completely open state. */ public void onDrawerOpened(View drawerView) { supportInvalidateOptionsMenu(); // creates call to onPrepareOptionsMenu() } }; // Set the drawer toggle as the DrawerListener mDrawerLayout.setDrawerListener(mDrawerToggle); // Restore app state if any if (savedInstanceState == null) { mLeftMenuContainer = (LinearLayout) findViewById(R.id.left_menu_container); mLeftMenuContainer.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View arg0, MotionEvent arg1) { // return TRUE to avoid tap on back view return true; } }); mDrawerLayout.closeDrawer(mLeftMenuContainer); } // enable ActionBar app icon to behave as action to toggle nav drawer getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayShowTitleEnabled(true); getSupportActionBar().setLogo(R.drawable.ic_action_bar_logo); } /* Called whenever we call supportInvalidateOptionsMenu() */ @Override public boolean onPrepareOptionsMenu(Menu menu) { // If the nav drawer is open, hide action items related to the content // view if (mDrawerLayout != null && mLeftMenuContainer != null) { boolean drawerOpen = mDrawerLayout.isDrawerOpen(mLeftMenuContainer); for (int i = 0; i < menu.size(); i++) { menu.getItem(i).setVisible(!drawerOpen); } } return super.onPrepareOptionsMenu(menu); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); mDrawerToggle.onConfigurationChanged(newConfig); } @Override public boolean onCreateOptionsMenu(Menu menu) { mMenu = menu; // Inflate the menu; this adds items to the action bar if it is present. // enable ActionBar app icon to behave as action to toggle nav drawer getMenuInflater().inflate(R.menu.main, menu); MenuItem searchItem = menu.findItem(R.id.action_bar_search); final SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchableInfo info = searchManager.getSearchableInfo(getComponentName()); searchView.setSearchableInfo(info); AutoCompleteTextView searchText = (AutoCompleteTextView) searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); searchText.setHintTextColor(getResources().getColor(R.color.color_action_bar_search_text)); searchText.setTextColor(getResources().getColor(R.color.color_action_bar_search_text)); searchView.setIconifiedByDefault(true); // Getting the 'search_plate' LinearLayout. View searchPlate = searchView.findViewById(android.support.v7.appcompat.R.id.search_plate); // Setting background of 'search_plate' to personal defined drawable. if (searchPlate != null) { searchPlate .setBackgroundResource(R.drawable.texfield_search_view_theme); } // Set search view clear icon ImageView searchIconClearView = (ImageView) searchView .findViewById(android.support.v7.appcompat.R.id.search_close_btn); if (searchIconClearView != null) { Log.v(LOG_TAG, "Should Change Clear Icon here"); searchIconClearView .setImageResource(R.drawable.ic_action_bar_clear_search); } // Set search view Magnifier icon ImageView searchIcon = (ImageView) searchView.findViewById(android.support.v7.appcompat.R.id.search_mag_icon); if (searchIcon != null) { Log.v(LOG_TAG, "Should Change Search Icon here"); searchIcon.setImageResource(R.drawable.ic_action_bar_back); } // Set on click to open a fragment, not a activity final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { // Do something return true; } @Override public boolean onQueryTextSubmit(String query) { Log.v(LOG_TAG, "Performed search with: " + query); searchView.clearFocus(); return true; } }; searchView.setOnQueryTextListener(queryTextListener); MenuItemCompat.setOnActionExpandListener(searchItem, new OnActionExpandListener() { @Override public boolean onMenuItemActionCollapse(MenuItem arg0) { mMenu.findItem(R.id.action_bar_cart).setVisible(true); return true; } @Override public boolean onMenuItemActionExpand(MenuItem arg0) { getSupportActionBar().setIcon(R.drawable.ic_action_bar_logo); mMenu.findItem(R.id.action_bar_cart).setVisible(false); return true; } }); return super.onCreateOptionsMenu(menu); } 

Может кто-нибудь, пожалуйста, скажите мне, что я делаю что-то неправильно?

— РЕДАКТИРОВАТЬ —

Мне удалось исправить вопрос номер 1 и 2:

Что вам нужно сделать, так это определить homeUpIcon в вашей теме. Итак, если вы поддерживаете API 10, как я:

 <style name="Theme.MyTheme" parent="@style/Theme.AppCompat.Light"> <item name="searchViewSearchIcon">@drawable/your_search_icon</item> <!-- API 13- Support --> <item name="homeAsUpIndicator">@drawable/your_back_icon</item> <!-- API 14+ --> <item name="android:homeAsUpIndicator">@drawable/your_back_icon</item> </style> 

найти в
ActionBarSherlock: изменение homeAsUpIndicator не работает
И Изменение фонового рисунка виджета searchview

Самый важный вопрос все еще ожидает, и если кто-нибудь знает ответ, напишите здесь!

Попробуй это:

  public boolean onQueryTextSubmit(String query) { MenuItemCompat.collapseActionView(searchItem); return false; }