2017-04-21 54 views
8

Mam pasek narzędzi android.support.v7.widget w mojej aplikacji na Androida. Kolor tła jest jasno pomarańczowy, a najlepiej wyglądającym kolorem jest biały zamiast czarny.Zmiana koloru ikony paska narzędzi przepełnienia

Mam domyślny kolor na czarno, a nie biały. Ponieważ byłoby to sprzeczne z innymi rzeczami, prawie niemożliwe jest nadpisanie. Nie mogę zmienić podstawowego koloru tekstu na biały!

Udało mi się zmienić kolor tytułu. To, czego teraz szukam, to jak zmienić kolor przycisku akcji (na biały).

enter image description here

Dzięki

Edit: wraz z kodem teraz

Główna działalność:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
tools:context=".UI.activities.MainActivity"> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/r2_toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?attr/actionBarSize" 
    android:background="?attr/colorPrimary" 
    android:elevation="4dp" 
    app:titleTextColor="@color/primary_text_material_light" 
    app:subtitleTextColor="@color/primary_text_material_light" 
    android:theme="@style/R2Theme.Toolbar"/> 

<fragment android:name="com.r2retail.r2retailapp.UI.fragments.SetupFragment" 
    android:layout_below="@+id/r2_toolbar" 
    android:id="@+id/list" 
    android:layout_weight="1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 


</RelativeLayout> 

Pasek menu:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<item android:id="@+id/about" 
    android:icon="@drawable/ic_menu" 
    android:title="About" 
    app:showAsAction="never"/> 

</menu> 

Style:

<resources> 

<style name="R2Theme" parent="Theme.AppCompat.Light.NoActionBar">= 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorPrimary</item> 
    <item name="android:textColorPrimary">@color/secondary_text_material_dark</item> 
    <item name="android:textColorSecondaryInverse">@color/primary_text_material_light</item> 
</style> 

<style name="R2Theme.Toolbar" parent="R2Theme"> 
    <item name="actionMenuTextColor">@color/primary_text_material_light</item> 
</style> 

</resources> 
+0

Pokaż swój kod rzeczy, które obejmują pasek narzędzi z tego przycisku. –

+0

@SatanPandeya Dodałem kod –

+0

Czy nie ma sposobu, aby dostosować kolor ic_menu, bezpośrednio z jego pliku jak zmiana 'fillColor'? –

Odpowiedz

17

w stylach:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    ... 
    <item name="actionOverflowButtonStyle">@style/MyOverflowButtonStyle</item> 
</style> 

<style name="MyOverflowButtonStyle" parent="Widget.AppCompat.ActionButton.Overflow"> 
    <item name="android:tint">#62ff00</item> 
</style> 

Wynik:

enter image description here

+2

Wreszcie, trochę prostoty! Pracował w ciągu kilku sekund, bez żadnego problemu. Idealne rozwiązanie. Dziękuję Ci! –

1

Rozwiązaniem jest zastąpienie samej ikony.

1-ty

idź do valuse/style w swojej styles.xml plików dodatek:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 
     <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item> 
</style> 

<style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.Light.ActionButton.Overflow"> 
    <!--Here you need to put name of drawable you will create during the next step--> 
    <item name="android:src">@drawable/your_white_icon</item> 
</style> 

2-ty

Następnie podróż do rozciągliwej folderu. Kliknij prawym przyciskiem myszy -> nowy -> zasobnik wektorowy. Następnie naciśnij ikonę Ikona i wybierz jedną z sugerowanych ikon o nazwie ic_more_vert_black_24dp.

Dostosuj -> naciśnij next -> finish.

Następnie otwórz nowo utworzony plik ikony. Kod wygląda tak.

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
     android:width="24dp" 
     android:height="24dp" 
     android:viewportWidth="24.0" 
     android:viewportHeight="24.0"> 
    <path 
     android:fillColor="#FFFFFFFF" <!-- Here u can change color--> 
     android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/> 
</vector> 

Zmień atrybut fillColor na kolor, który potrzebujesz. Umieść ten plik w stylu opisanym w pierwszym kroku.

Voila! Kolor trzech kropek zmienił się nie w zależności od podstawowych stylów aplikacji (wynik dla koloru # FF2012).

enter image description here

0

Alternatywnym sposobem, w kodzie zamiast XML:

public static boolean colorizeToolbarOverflowButton(@NonNull Toolbar toolbar, @ColorInt int color) { 
    final Drawable overflowIcon = toolbar.getOverflowIcon(); 
    if (overflowIcon == null) 
     return false; 
    toolbar.setOverflowIcon(getTintedDrawable(toolbar.getContext(), overflowIcon, toolbarIconsColor)); 
    return true; 
} 

public static Drawable getTintedDrawable(@NonNull Context context, @NonNull Drawable inputDrawable, @ColorInt int color) { 
    Drawable wrapDrawable = DrawableCompat.wrap(inputDrawable); 
    DrawableCompat.setTint(wrapDrawable, color); 
    DrawableCompat.setTintMode(wrapDrawable, Mode.SRC_IN); 
    return wrapDrawable; 
} 

Funkcja zwróci wartość true, jeśli uda się pokolorować ikonę przepełnienia.

I kolejna alternatywa, w przypadku, gdy nie chcesz używać przyciemniane odkształcalne:

public static boolean colorizeToolbarOverflowButton(@NonNull Toolbar toolbar, @ColorInt Integer color) { 
    final Drawable overflowIcon = toolbar.getOverflowIcon(); 
    if (overflowIcon == null) 
     return false; 
    final PorterDuffColorFilter colorFilter = toolbarIconsColor == null ? null : new PorterDuffColorFilter(toolbarIconsColor, PorterDuff.Mode.MULTIPLY); 
    overflowIcon.setColorFilter(colorFilter); 
    return true; 
}