จะเปลี่ยนสีของลูกศรย้อนกลับในธีมวัสดุใหม่ได้อย่างไร


193

ฉันได้อัปเดต SDK เป็น API 21 แล้วและตอนนี้ไอคอนสำรอง / เป็นลูกศรสีดำชี้ไปทางซ้าย

ลูกศรย้อนกลับสีดำ

ฉันอยากให้มันเป็นสีเทา ฉันจะทำสิ่งนั้นได้อย่างไร

ตัวอย่างเช่นใน Play Store ลูกศรจะเป็นสีขาว

ฉันได้ทำสิ่งนี้เพื่อกำหนดสไตล์ ฉันได้ใช้สำหรับ@drawable/abc_ic_ab_back_mtrl_am_alpha homeAsUpIndicatordrawable นั้นโปร่งใส (อัลฟาเท่านั้น) แต่ลูกศรจะแสดงเป็นสีดำ DrawerArrowStyleฉันสงสัยว่าฉันสามารถตั้งค่าสีเหมือนที่ผมทำใน หรือถ้าเพียงการแก้ปัญหาคือการสร้างของฉันและใช้งานได้@drawable/grey_arrowhomeAsUpIndicator

<!-- Base application theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light">

    <item name="android:actionBarStyle" tools:ignore="NewApi">@style/MyActionBar</item>
    <item name="actionBarStyle">@style/MyActionBar</item>

    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>

    <item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
    <item name="android:homeAsUpIndicator" tools:ignore="NewApi">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
</style>

<!-- ActionBar style -->
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">

    <item name="android:background">@color/actionbar_background</item>
    <!-- Support library compatibility -->
    <item name="background">@color/actionbar_background</item>
</style>

<!-- Style for the navigation drawer icon -->
<style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@color/actionbar_text</item>
</style>

วิธีแก้ปัญหาของฉันจนถึงตอนนี้ก็คือการใช้@drawable/abc_ic_ab_back_mtrl_am_alphaซึ่งดูเหมือนจะเป็นสีขาวและทาสีด้วยสีที่ฉันต้องการโดยใช้โปรแกรมแก้ไขภาพ มันทำงานได้ แต่ผมต้องการที่จะใช้เช่นเดียวกับใน@color/actionbar_textDrawerArrowStyle


ไม่มีคำตอบที่ยึดตาม XML เพื่อแก้ไขปัญหานี้สำหรับฉัน แต่ฉันใช้รหัสของคุณhomeAsUpIndicator/ สำเร็จ@drawable/abc_ic_ab_back_mtrl_am_alphaเพื่อทำให้ลูกศรย้อนกลับขาว ฉันชอบสิ่งนี้มากกว่าการแฮ็คเข้าสู่ Java
บ้านจีโอ

เก่า แต่ก็ยังคง คุณเคยใช้ ActionBar หรือ Toolbar ใหม่หรือไม่
f470071

ค่าเริ่มต้นควรเป็นสีเทาเล็กน้อยโดยใช้ android: theme = "@ style / Widget.AppCompat.Light.ActionBar" ภายในแท็ก XML ของแถบเครื่องมือ สีของมันคือ # 737373
นักพัฒนา android

คำตอบ:


354

คุณสามารถบรรลุได้ด้วยรหัส รับลูกศรย้อนกลับที่วาดได้ปรับสีด้วยฟิลเตอร์และตั้งเป็นปุ่มย้อนกลับ

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

รุ่นที่ 1:

เริ่มต้นจาก API 23 (Marshmallow) ทรัพยากร drawable จะเปลี่ยนไปabc_ic_ab_back_mtrl_am_alphaabc_ic_ab_back_material

แก้ไข:

คุณสามารถใช้รหัสนี้เพื่อให้ได้ผลลัพธ์ที่คุณต้องการ:

toolbar.getNavigationIcon().setColorFilter(getResources().getColor(R.color.blue_gray_15), PorterDuff.Mode.SRC_ATOP);

4
นี่เป็นสิ่งเดียวที่ใช้ได้ผลสำหรับฉันโดยไม่ต้องเปลี่ยนสีวิดเจ็ตอื่น ๆ ทั้งหมดด้วย colorControlNormal
Joris

4
ปัญหากับการแก้ปัญหานี้คือมันวาดลูกศรย้อนกลับอื่น ๆ ของคุณทั้งหมดหากคุณเพียงต้องการเปลี่ยนหนึ่งและปล่อยให้สีขาวที่เหลือ
dabluck

24
มันได้ผล. โปรดทราบว่าคุณควรใช้ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha)เพราะgetResources.getDrawable(int)เลิกใช้แล้ว
mrroboaat

3
อีกวิธีที่เป็นไปได้ที่จะให้คุณที่จะได้รับทรัพยากรที่ตัวเองและใส่ไว้ในโฟลเดอร์ drawable ของคุณ :)
Mauker

12
โปรดทราบว่า abc_ic_ab_back_mtrl_am_alpha เปลี่ยนเป็น abc_ic_ab_back_material ในไลบรารีการสนับสนุน 23.2.0
Jon

206

กำลังมองหาที่ToolbarและTintManagerแหล่งที่มาเป็นสีที่มีค่าของแอตทริบิวต์สไตล์drawable/abc_ic_ab_back_mtrl_am_alphacolorControlNormal

ฉันลองตั้งค่าในโครงการของฉัน (ด้วย<item name="colorControlNormal">@color/my_awesome_color</item>ในธีมของฉัน) แต่ก็ยังเป็นสีดำสำหรับฉัน

อัปเดต :

พบมัน คุณจำเป็นต้องตั้งค่าactionBarThemeแอตทริบิวต์ ( ไม่ได้ actionBarStyle ) colorControlNormalด้วย

เช่น:

<style name="MyTheme" parent="Theme.AppCompat.Light">        
    <item name="actionBarTheme">@style/MyApp.ActionBarTheme</item>
    <item name="actionBarStyle">@style/MyApp.ActionBar</item>
    <!-- color for widget theming, eg EditText. Doesn't effect ActionBar. -->
    <item name="colorControlNormal">@color/my_awesome_color</item>
    <!-- The animated arrow style -->
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
</style>

<style name="MyApp.ActionBarTheme" parent="@style/ThemeOverlay.AppCompat.ActionBar">       
    <!-- THIS is where you can color the arrow! -->
    <item name="colorControlNormal">@color/my_awesome_color</item>
</style>

<style name="MyApp.ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="elevation">0dp</item>      
    <!-- style for actionBar title -->  
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <!-- style for actionBar subtitle -->  
    <item name="subtitleTextStyle">@style/ActionBarSubtitleText</item>

    <!-- 
    the actionBarTheme doesn't use the colorControlNormal attribute
    <item name="colorControlNormal">@color/my_awesome_color</item>
     -->
</style>

4
นี่ควรเป็นคำตอบที่ยอมรับได้ ขอบคุณสำหรับสิ่งนี้. คำถามฉันไม่สามารถค้นหาสไตล์สำหรับการระบายสีลูกศรที่แสดงเมื่อ SearchView ถูกขยาย เบาะแสใด ๆ ดูเหมือนจะไม่ได้รับผลกระทบจากคำตอบนี้
Daniel Ochoa

6
ฉันต้องเพิ่ม <item name = "android: colorControlNormal"> ... </item> ด้วย android: คำนำหน้า
Seraphim's

7
น่าเสียดายที่นี่เป็น API ระดับ 21 และหากคุณต้องการสนับสนุนสิ่งใดก็ตามด้านล่างมันจะไม่ทำงาน
gphilip

10
หากธีมหลักของคุณมาจากหนึ่งในธีม "NoActionBar" ดังนั้นการตั้งค่าcolorControlNormalในธีมรูทแทนที่จะactionBarThemeเป็นเส้นทางที่จะไป
เจสันโรบินสัน

3
ฉันใช้เวลาเพียง 2 ชั่วโมงในการค้นหาและล้มเหลวและค้นหาอีกครั้งเพื่อให้ได้สิ่งนี้ในที่สุด บางครั้งสไตล์ 'ระบบ' ใน Android ทำให้ฉันบ้า! วิธีนี้มีความสำคัญอย่างยิ่งที่จะใช้เมื่อคุณมีกิจกรรมหนึ่งที่ไม่ได้ใช้สไตล์เดียวกับกิจกรรมอื่น ๆ
Bron Davies

119

ลองคำแนะนำทั้งหมดข้างต้น วิธีเดียวที่ฉันจัดการเพื่อเปลี่ยนสีของไอคอนการนำทางลูกศรปุ่มย้อนกลับเริ่มต้นในแถบเครื่องมือของฉันคือการตั้งค่า colorControlNormal ในชุดรูปแบบพื้นฐานเช่นนี้ อาจเป็นเพราะความจริงที่ว่าผู้ปกครองใช้ Theme.AppCompat.Light.NoActionBar

<style name="BaseTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/white</item> 
  //the rest of your codes...
</style>

6
คำตอบที่ง่ายที่สุดทั้งหมดแทนที่จะเล่นซอกับโค้ดอื่นเพียงเพิ่มบรรทัดนี้ในของคุณstyle.xml
Rohan Kandwal

3
โปรดจำไว้ว่า colorControlNormal ต้องการ API 21
Adnan Ali

3
@AdnanAli หากคุณใช้ AppCompat ก็จะใช้งานได้กับ <API 21 เช่นกัน เห็นได้ชัดว่า AppCompat จะถูกนำมาใช้ที่นี่เพราะcolorControlNormalจะไม่android:นำหน้าด้วย
Vicky Chijwani

3
แต่การเปลี่ยนแปลงนี้จะทำให้สีของวิดเจ็ตอื่น ๆ หมดลงเช่นกัน .. จะไม่มีผลกระทบกับวิดเจ็ตอื่น ๆ เช่นช่องทำเครื่องหมายและปุ่มตัวเลือกหรือไม่?
บรูซ

2
แต่สิ่งนี้จะเปลี่ยนสีของตัวควบคุมอื่นเช่นปุ่มตัวเลือกและบรรทัดภายใต้การแก้ไขข้อความ
daka

66

จำเป็นต้องเพิ่มคุณสมบัติเดียวในรูปแบบแถบเครื่องมือของคุณ -

<style name="toolbar_theme" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="colorControlNormal">@color/arrow_color</item>
</style>

ใช้ toolbar_theme นี้กับแถบเครื่องมือของคุณ

หรือ

คุณสามารถนำไปใช้กับธีมของคุณได้โดยตรง -

<style name="CustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorControlNormal">@color/arrow_color</item> 
  //your code ....
</style>

5
การลองคำตอบที่ได้รับการยอมรับ (อาจเป็นคำตอบที่ได้รับความนิยมสูงสุดในเน็ต) ไม่ได้ผลสำหรับฉัน แต่อันนี้ใช้ได้ผลดีมาก :) เมื่อใช้โปรแกรม Android
King King

4
คำตอบที่ง่ายที่สุด สิ่งนี้ทำงานได้โดยไม่เปลี่ยนธีมควบคุมอื่น ๆ สิ่งที่คุณต้องทำก็คือตั้งค่าธีมของแถบเครื่องมือที่กำหนดเองเป็นแถบเครื่องมือของคุณ :)
SimplyProgrammer

1
โอ้ความเจ็บปวดที่คุณต้องทำเพื่อเปลี่ยนสีของไอคอนเพียง 1 อัน .. อันแรกใช้ได้กับฉัน อันที่สองใช้ได้กับแถบเครื่องมือที่กำหนดเอง (และสิ่งอื่น ๆ ด้วย) 3 ปีต่อมาขอบคุณ Neo
Aba

45

เพียงเพิ่ม

<item name="colorControlNormal">@color/white</item> 

ไปที่ธีมแอปปัจจุบันของคุณ


2
นี่คือการเปลี่ยนสี android.support.v7.widget.AppCompatCheckBox ยัง
Udi Oshi

34

หากใช้Toolbarคุณสามารถลอง

Drawable drawable = toolbar.getNavigationIcon();
drawable.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP);

นี่ควรเป็นคำตอบที่ได้รับการยอมรับ imho ตั้งเป้าหมายแค่ลูกศรรับลูกศรเพื่อตั้งค่าโดยใช้วิธีที่ง่ายที่สุดและเข้ากันได้กับ API 21 ด้านล่าง
Antek

หากคุณต้องการโซลูชันที่กำหนดเองเพิ่มเติม (สีแตกต่างกันสำหรับชื่อเรื่องและไอคอนเมนูในกรณีของฉัน) นี่คือโซลูชันที่คุณต้องการ
TheJudge

3
โปรดทราบว่าคุณอาจต้องเรียกใช้สิ่งนี้ก่อนที่จะพยายามเรียกใช้ getNavigationIcon (): getSupportActionBar () setDisplayHomeAsUpEnabled (true);
rrbrambley

คำตอบที่ดีที่สุด! ขอบคุณ.
อิสลามที่

32

ดังที่ได้กล่าวไว้ในความคิดเห็นส่วนใหญ่ก่อนหน้านี้การแก้ปัญหาคือการเพิ่ม

<item name="colorControlNormal">@color/white</item> ในธีมแอพของคุณ แต่ยืนยันว่าคุณไม่มีธีมอื่นที่กำหนดไว้ในองค์ประกอบ Toolbar ของคุณในเลย์เอาต์ของคุณ

     <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            android:elevation="4dp"
            android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

3
ยอดเยี่ยม ... ฉันลองทุกคำตอบเพื่อเพิ่มในชุดรูปแบบ แต่มันไม่ทำงาน ... อย่างที่คุณพูดถึงฉันมี android: theme = "@ style / ThemeOverlay.AppCompat.ActionBar" ในแถบเครื่องมือของฉัน เมื่อฉันลบมันมันเริ่มทำงาน
ราหุลฮอกจ์

10

คำตอบโดย Carles เป็นคำตอบที่ถูกต้อง แต่มีไม่กี่วิธีเช่นgetDrawable (), getColor () เลิกใช้แล้วในขณะที่ฉันเขียนคำตอบนี้ ดังนั้นคำตอบที่ปรับปรุงจะเป็น

Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(ContextCompat.getColor(context, R.color.white), PorterDuff.Mode.SRC_ATOP);
getSupportActionBar().setHomeAsUpIndicator(upArrow);

ตามการสืบค้นแบบสแต็คอื่น ๆ ฉันพบว่าการเรียกContextCompat.getDrawable ()คล้ายกับ

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    return resources.getDrawable(id, context.getTheme());
} else {
    return resources.getDrawable(id);
}

และContextCompat.getColor ()คล้ายกับ

public static final int getColor(Context context, int id) {
    final int version = Build.VERSION.SDK_INT;
    if (version >= 23) {
        return ContextCompatApi23.getColor(context, id);
    } else {
        return context.getResources().getColor(id);
    }
}

ลิงก์ 1: ContextCompat.getDrawable ()

ลิงก์ 2: ContextCompat.getColor ()


มันควรจะเป็นแทนabc_ic_ab_back_material abc_ic_ab_back_mtrl_am_alpha
Narendra Singh

7

ฉันพบโซลูชันที่ใช้งานได้กับ Lollipop ก่อน ตั้งค่า "colorControlNormal" ภายใน "actionBarWidgetTheme" เพื่อเปลี่ยนสี homeAsUpIndicator การแก้ไขคำตอบของ rockgecko จากด้านบนให้เป็นดังนี้:

<style name="MyTheme" parent="Theme.AppCompat.Light">        
    <item name="actionBarTheme">@style/MyApp.ActionBarTheme</item>
    <item name="actionBarStyle">@style/MyApp.ActionBar</item>
    <!-- color for widget theming, eg EditText. Doesn't effect ActionBar. -->
    <item name="colorControlNormal">@color/my_awesome_color</item>
    <!-- The animated arrow style -->
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <!-- The style for the widgets on the ActionBar. -->
    <item name="actionBarWidgetTheme">@style/WidgetStyle</item>
</style>

<style name="WidgetStyle" parent="style/ThemeOverlay.AppCompat.Light">
    <item name="colorControlNormal">@color/my_awesome_color</item>
</style>

7

ใน compileSdkVersoin 25 คุณสามารถทำได้:

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
     <item name="android:textColorSecondary">@color/your_color</item>
</style>

6

ใช้วิธีการด้านล่าง:

private Drawable getColoredArrow() {
    Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
    Drawable wrapped = DrawableCompat.wrap(arrowDrawable);

    if (arrowDrawable != null && wrapped != null) {
        // This should avoid tinting all the arrows
        arrowDrawable.mutate();
        DrawableCompat.setTint(wrapped, Color.GRAY);
    }

    return wrapped;
}

ตอนนี้คุณสามารถตั้งค่า drawable ด้วย:

getSupportActionBar().setHomeAsUpIndicator(getColoredArrow());

6

ป้อนคำอธิบายรูปภาพที่นี่

เปลี่ยนสีไอคอนเมนู Nav

เปลี่ยนสีของไอคอนเมนูสุดท้าย

ใน style.xml:

<style name="MyMaterialTheme.Base" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="drawerArrowStyle">@style/DrawerArrowStyle</item>
    <item name="android:textColor">@color/colorAccent</item>


</style>

<style name="DrawerArrowStyle" parent="@style/Widget.AppCompat.DrawerArrowToggle">
    <item name="spinBars">true</item>
    <item name="color">@color/colorPrimaryDark</item>
</style>







In Mainfests.xml :

<activity android:name=".MainActivity"
        android:theme="@style/MyMaterialTheme.Base"></activity>

5

โซลูชันอื่นที่อาจใช้งานได้สำหรับคุณคือไม่ประกาศแถบเครื่องมือของคุณเป็นแถบการกระทำของแอป (โดยsetActionBarหรือsetSupportActionBar) และตั้งค่าไอคอนด้านหลังใน onActivityCreated โดยใช้รหัสที่กล่าวถึงในคำตอบอื่นในหน้านี้

final Drawable upArrow = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
upArrow.setColorFilter(getResources().getColor(R.color.grey), PorterDuff.Mode.SRC_ATOP);
toolbar.setNavigationIcon(upArrow);

ตอนนี้คุณจะไม่ได้รับการonOptionItemSelectedติดต่อกลับเมื่อคุณกดปุ่มย้อนกลับ อย่างไรก็ตามคุณสามารถลงทะเบียนเพื่อใช้งานsetNavigationOnClickListenerได้ นี่คือสิ่งที่ฉันทำ:

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        getActivity().onBackPressed(); //or whatever you used to do on your onOptionItemSelected's android.R.id.home callback
    }
});

ฉันไม่แน่ใจว่ามันจะทำงานถ้าคุณทำงานกับรายการเมนู


3

เราพบปัญหาเดียวกันและทุกอย่างที่เราต้องการคือการตั้งค่า

แอป collapseIcon

คุณลักษณะในแถบเครื่องมือในตอนท้ายซึ่งเราไม่พบเพราะมันไม่ได้เป็นเอกสารที่ดีมาก :)

<android.support.v7.widget.Toolbar
         android:id="@+id/toolbar"
         android:layout_width="match_parent"
         android:layout_height="@dimen/toolbarHeight"
         app:collapseIcon="@drawable/collapseBackIcon" />

3

ลองนี้

public void enableActionBarHomeButton(AppCompatActivity appCompatActivity, int colorId){

    final Drawable upArrow = ContextCompat.getDrawable(appCompatActivity, R.drawable.abc_ic_ab_back_material);
    upArrow.setColorFilter(ContextCompat.getColor(appCompatActivity, colorId), PorterDuff.Mode.SRC_ATOP);

    android.support.v7.app.ActionBar mActionBar = appCompatActivity.getSupportActionBar();
    mActionBar.setHomeAsUpIndicator(upArrow);
    mActionBar.setHomeButtonEnabled(true);
    mActionBar.setDisplayHomeAsUpEnabled(true);
}

ฟังก์ชั่นการโทร:

enableActionBarHomeButton(this, R.color.white);

การตั้งค่าตัวเลือกการแสดง {@link #DISPLAY_HOME_AS_UP} จะเป็นการเปิดใช้งานปุ่มโฮมโดยอัตโนมัติ
P. Savrov

2

นี่คือสิ่งที่ได้ผลสำหรับฉัน:

เพิ่มแอตทริบิวต์ด้านล่างให้กับธีมของคุณ

ในการเปลี่ยนลูกศรกลับของ toolbar / actionbar ด้านบน API 21

<item name="android:homeAsUpIndicator">@drawable/your_drawable_icon</item>

หากต้องการเปลี่ยนลูกศรกลับของ toolbar / actionbar ด้านล่าง API 21

<item name="homeAsUpIndicator">@drawable/your_drawable_icon</item>

ในการเปลี่ยนลูกศรโหมดแอ็คชั่น

<item name="actionModeCloseDrawable">@drawable/your_drawable_icon</item>

เมื่อต้องการลบเงาแถบเครื่องมือ / actionbar

<item name="android:elevation" tools:targetApi="lollipop">0dp</item>
<item name="elevation">0dp</item>
<!--backward compatibility-->
<item name="android:windowContentOverlay">@null</item>

ในการเปลี่ยนแอคชั่นที่ล้นออกได้

<!--under theme-->
<item name="actionOverflowButtonStyle">@style/MenuOverflowStyle</item>

<style name="MenuOverflowStyle" parent="Widget.AppCompat.ActionButton.Overflow">
<item name="srcCompat">@drawable/ic_menu_overflow</item>

หมายเหตุ: 'srcCompat' ใช้แทน 'android: src' เนื่องจากการสนับสนุนเวกเตอร์ที่สามารถวาดได้สำหรับ api ด้านล่าง 21


2

การแก้ปัญหาง่ายมาก

เพียงใส่บรรทัดต่อไปนี้ในสไตล์ของคุณชื่อเป็นAppTheme

<item name="colorControlNormal">@color/white</item>

ตอนนี้โค้ด xml ทั้งหมดของคุณจะมีลักษณะตามที่แสดงด้านล่าง (สไตล์เริ่มต้น)

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

        <item name="colorPrimary">#0F0F0F</item>
        <item name="android:statusBarColor">#EEEEF0</item>
        <item name="android:windowLightStatusBar">true</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowActivityTransitions">true</item>

        <item name="colorControlNormal">@color/white</item>
</style>

1

ฉันเพิ่งเปลี่ยนชุดรูปแบบแถบเครื่องมือเป็น @ style / ThemeOverlay.AppCompat.Light

และลูกธนูก็กลายเป็นสีเทาเข้ม

            <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:gravity="center"
            app:layout_collapseMode="pin"
            app:theme="@style/ThemeOverlay.AppCompat.Light">

1

นี่คือวิธีที่ฉันทำในส่วนประกอบวัสดุ:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="drawerArrowStyle">@style/AppTheme.DrawerArrowToggle</item>
</style>

<style name="AppTheme.DrawerArrowToggle" parent="Widget.AppCompat.DrawerArrowToggle">
    <item name="color">@android:color/white</item>
</style>

บัดดี้คุณช่วยชีวิตฉันไว้ ฉันใช้เวลาทั้งวันกับอันนี้เท่านั้น ฉันหวังว่าฉันจะให้คะแนนคุณมากกว่านี้
Dhaval Patel

0

คุณสามารถเปลี่ยนสีของไอคอนการนำทางโดยทางโปรแกรมดังนี้:

mToolbar.setNavigationIcon(getColoredArrow()); 

private Drawable getColoredArrow() {
        Drawable arrowDrawable = getResources().getDrawable(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        Drawable wrapped = DrawableCompat.wrap(arrowDrawable);

        if (arrowDrawable != null && wrapped != null) {
            // This should avoid tinting all the arrows
            arrowDrawable.mutate();
                DrawableCompat.setTintList(wrapped, ColorStateList.valueOf(this.getResources().getColor(R.color.your_color)));
            }
        }

        return wrapped;
}

-1

เพียงลบandroid:homeAsUpIndicatorและออกhomeAsUpIndicatorจากธีมของคุณและมันก็จะดี colorแอตทริบิวต์ของคุณในDrawerArrowStyleรูปแบบที่จะต้องเพียงพอ


ฉันลองแล้วและลูกศรเป็นสีดำ หมายเหตุลูกศรนี้ไม่ใช่ลูกศรเดียวกับที่คุณเห็นเมื่อคุณเปิดลิ้นชัก (ลูกศรนั้นได้รับผลกระทบจากcolorแอตทริบิวต์) ลูกศรของลิ้นชักใหญ่ขึ้นอีกเล็กน้อย
Ferran Maylinch

1
ดังนั้นดูเหมือนว่าคุณจะต้องให้ทรัพยากรที่สามารถวาดได้เอง คุณสามารถสร้างโดยใช้เครื่องมือนี้: shreyasachar.github.io/AndroidAssetStudio
Flávio Faria

-4

ถ้าไม่มีวิธีแก้ปัญหาที่ดีกว่า ...

สิ่งที่ฉันทำก็คือถ่าย@drawable/abc_ic_ab_back_mtrl_am_alphaภาพซึ่งดูเหมือนจะเป็นสีขาวและวาดภาพสีตามที่ฉันต้องการโดยใช้โปรแกรมตกแต่งภาพ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.