2016-12-06 5 views
0

Я пытаюсь изменить цвет значка «вверх» на ActionBar, который я показываю в своем диалоговом окне.Изменение цвета кнопки «Вниз» кнопки «Вниз»

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

Вот код, когда я изменить цвет фона на поиск щелкнул:

MenuItemCompat.setOnActionExpandListener(searchView, 
new MenuItemCompat.OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionExpand(MenuItem menuItem) { 
        mIsSearchViewOpen = true; 
        ActionBar ab = ((MyActivity) getActivity()).getSupportActionBar(); 
        //Change the ActionBar background color when SearchView is expanded 
        if (ab != null) { 
         ab.setDisplayShowHomeEnabled(true); 
         ab.setDisplayHomeAsUpEnabled(true); 
         ab.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_gray_rect)); 
         ab.setHomeAsUpIndicator(R.drawable.ic_back_arrow); //this doesn't work. its still white. 
        } 
        return true; 
       } 
     }); 

В приведенном выше случае, серый фон применяется как ожидалось, но почему задняя стрелка не отображается? Он все еще белый.

EDIT: я заметил, что это не применяется, когда элемент расширен, но применяется после свертывания поиска. Итак, когда открывается диалог, его белый цвет. Когда я нажимаю на поиск, чтобы развернуть его, он все еще белый. Но когда я ударил это, и поиск рушится, он становится серым.

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

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    if(toolbar == null) { 
     ActionBar ab = getSupportActionBar(); 
     if (ab != null) { 
      ab.setDisplayHomeAsUpEnabled(true); 
      ab.setElevation(0); 
     } 
    } else { 
     setSupportActionBar(toolbar); 
} 

Кроме того, вот мой toolbar:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay" 
    app:elevation="0dp"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:contentInsetLeft="72dp" 
     android:contentInsetStart="72dp" 
     app:contentInsetLeft="72dp" 
     app:contentInsetStart="72dp" 
     app:popupTheme="@style/AppTheme.PopupOverlay" 
     app:theme="@style/MyApp.ThemeOverlay.AppCompat.ActionBar" 
     app:titleTextAppearance="@style/TextAppearance.MyApp.ActionBar.Title" 
     tools:ignore="UnusedAttribute"> 

     <ImageView 
      android:id="@+id/toolbar_logo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:src="@drawable/logo_action_bar" 
      android:visibility="gone" 
      tools:ignore="ContentDescription" /> 

     <Spinner 
      android:id="@+id/spinner_nav" 
      style="@style/Widget.MyApp.Spinner.DropDown.ActionBar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:visibility="gone" /> 

    </android.support.v7.widget.Toolbar> 

</android.support.design.widget.AppBarLayout> 

И это мой theme, что я применяю в моей панели инструментов выше:

<style name="MyApp.ThemeOverlay.AppCompat.ActionBar" parent="Theme.AppCompat"> 
     <item name="android:homeAsUpIndicator">@drawable/ic_arrow_back</item> 
     <item name="homeAsUpIndicator">@drawable/ic_arrow_back</item> 
    </style> 

ответ

1

Вы можете добавить ColorFilter к Drawable подкрасить его:

 MenuItemCompat.setOnActionExpandListener(searchView, 
      new MenuItemCompat.OnActionExpandListener() { 
       @Override 
       public boolean onMenuItemActionExpand(MenuItem menuItem) { 
        mIsSearchViewOpen = true; 
        ActionBar ab = ((DSActivity) getActivity()).getSupportActionBar(); 
        //Change the ActionBar background color when SearchView is expanded 
        if (ab != null) { 
         ab.setDisplayShowHomeEnabled(true); 
         ab.setDisplayHomeAsUpEnabled(true); 
         ab.setBackgroundDrawable(getResources().getDrawable(R.drawable.bg_gray_rect)); 
         Drawable drawable = ResourcesCompat.getDrawable(getActivity(), R.drawable.ic_back_arrow, null); 
         drawable.setColorFilter(new PorterDuffColorFilter(getResources().getColor(R.color.gray), PorterDuff.Mode.SRC_IN)); 
         ab.setHomeAsUpIndicator(drawable); 
        } 
        return true; 
       } 
      }); 
+0

не применяется, когда элемент поиска меню расширен. Он применяется после того, как он рухнет. любая идея почему? – Intern

+0

Как вы устанавливаете свой ActionBar вне этого кода? –

+0

Возможно, вам следует добавить что-то похожее на onMenuItemActionCollapse() –

0

В манифесте декларации деятельности, убедитесь, что вы указываете вашу тему, как следует:

android:theme="@style/MyApp.ThemeOverlay.AppCompat.ActionBar" 
1

Добавить ниже код для изменения цвета стрелка вверх в методе oncreate ниже setcontentview.

getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha); 
    upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP); 
    getSupportActionBar().setHomeAsUpIndicator(upArrow);