การเปลี่ยนไอคอนโอเวอร์โฟลว์ในแถบการทำงาน


111

เป็นไปได้ไหมที่จะเปลี่ยนไอคอนล้นในแถบการทำงาน ฉันมีไอคอนสีน้ำเงินสำหรับรายการ ActionBar ทั้งหมดและฉันต้องการเปลี่ยนไอคอนล้นเมื่อปรากฏขึ้นด้วย


@ShirishHerwade: ลิงค์นั้นตายไปแล้ว
Al Lelopath

คำตอบ:


255

คุณสามารถมีสไตล์ได้ แต่คุณต้องเพิ่มในการประกาศธีมหลัก

<resources>
    <!-- Base application theme. -->
    <style name="Your.Theme" parent="@android:style/Theme.Holo">
        <!-- Pointer to Overflow style ***MUST*** go here or it will not work -->
        <item name="android:actionOverflowButtonStyle">@style/OverFlow</item>
    </style>

    <!-- Styles -->
    <style name="OverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
        <item name="android:src">@drawable/ic_action_overflow</item>
    </style>

</resources>

คุณยังสามารถเปลี่ยนแปลงได้แบบไดนามิกซึ่งฉันจะอธิบายรายละเอียดที่นี่:

การเปลี่ยนไอคอนเมนู Android Overflow โดยใช้โปรแกรม


1
ฉันพบวิธีแก้ปัญหานี้แล้วโดยมองหาซอร์สโค้ด แต่ขอบคุณ :) มันเป็นคำตอบที่ดี
pjanecze

6
โปรดทราบว่าสิ่งนี้ใช้กับ THEME ไม่ใช่ STYLE ให้ฉันติดอยู่สักพักจนกระทั่งฉันรู้ว่า Thx @aneal
Richard Le Mesurier

5
สิ่งนี้จะขัดข้องในแท็บเล็ตที่ใช้ Android 3.0 (API 11) เนื่องจากไม่ชอบให้คนกำหนดสไตล์ "android: actionOverflowButtonStyle" (อาจเป็นข้อบกพร่องของแพลตฟอร์ม) ดังนั้นคุณต้องใช้สไตล์ที่แตกต่างกันใน values-v11 / styles.xml และ values-v15 / styles.xml
Mr-IDE

10
และสำหรับผู้ใช้ ActionBarSherlock สไตล์ผู้ปกครองคือ:parent="Widget.Sherlock.ActionButton.Overflow"
Nick White

7
สำหรับ appcompat (v21 lollipop อยู่ดี) parent="@style/Widget.AppCompat.ActionButton.Overflow"ดูเหมือนว่าจะใช้ได้กับฉัน
fattire

16

สำหรับผู้ที่ไม่สามารถใช้งานได้ลองทำสิ่งนี้โดยไม่ใช้เนมสเปซ "android:"

<item name="actionOverflowButtonStyle">@style/OverFlow</item>

ขอบคุณเพื่อนสิ่งนี้ช่วยได้จริงๆ ใครมีคำอธิบายสำหรับเรื่องนี้
DaMachk

4
@DaMachk หากคุณกำลังใช้ AppCompat อย่าใส่เนมสเปซ "android:"
matiash

4
  1. เปลี่ยนไอคอนโอเวอร์โฟลว์ที่กำหนดเองของ Actionbar ใน styles.xml

     <resources>
        <!-- Base application theme. -->
        <style name=“MyTheme" parent="@android:style/Theme.Holo">
           <!-- Pointer to Overflow style DONT forget! -->
           <item name="android:actionOverflowButtonStyle">@style/MyOverFlow</item>
        </style>
    
        <!-- Styles -->
        <style name="MyOverFlow" parent="@android:style/Widget.Holo.ActionButton.Overflow">
            <item name="android:src">@drawable/ic_your_action_overflow</item>
        </style>
     </resources>
  2. ใส่ธีม "MyTheme" ที่กำหนดเองในแท็กแอปพลิเคชันของ AndroidManifest.xml

    <application
        android:name="com.example.android.MainApp"
        android:theme="@style/AppTheme">
    </application>

มีความสุข.@.@


4

ไม่ว่าฉันจะพยายามทำอะไรstyles.xmlแต่ก็ไม่มีวิธีแก้ปัญหาใดที่เหมาะกับฉัน ท้ายที่สุดหากคุณมี AppCompat 23+ ซึ่งคุณควรเป็นวิธีที่ง่ายที่สุดที่ใช้งานได้จริง:

toolbar.setOverflowIcon(drawable);

วิธีที่ถูกต้องที่สุดที่ฉันพบ!
Shubhamhackz

1

คำตอบของ @ adnealถูกต้อง (นี่เป็นเพียงคำอธิบายของชุมชน wiki เพื่อขยายความ)

ความคิดเห็นหนึ่งชี้ให้เห็นว่าอาจมีความเข้าใจผิดในการทำเช่นนี้ดังนั้นคำตอบของฉันจึงเป็นเพียงอีกตัวอย่างหนึ่งในการลบล้างรูปภาพไอคอน Overflow

โค้ดด้านล่างเป็นไปตามรูปแบบเทมเพลตจาก ADT ตัวอย่าง New Android Project รหัสมาจากstyles.xmlไฟล์ในres/valuesโฟลเดอร์


<style name="AppBaseTheme" parent="android:Theme.Light">
    <!--
        Theme customizations available in newer API levels can go in
        res/values-vXX/styles.xml, while customizations related to
        backward-compatibility can go here.

    -->
</style>

<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">

    <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    <item name="android:actionOverflowButtonStyle">@style/OverflowMenuButton</item>
</style>

<style name="OverflowMenuButton" parent="@android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_menu_moreoverflow</item>
</style>

อะไรโค้ดข้างต้นนี้จะเปลี่ยนไอคอนล้นเริ่มต้นกับสิ่งที่คุณมี drawable ic_menu_moreoverflowที่ชื่อ หากคุณต้องการวิธีทดสอบอย่างรวดเร็วให้ใช้ชื่อไฟล์ไอคอนตัวเรียกใช้งานแอปของคุณซึ่งจะทำให้ชัดเจนว่ามันทำงานอย่างไร

แหล่งข้อมูลที่มีประโยชน์ที่จะใช้เมื่อพยายามทำความเข้าใจกับActionBarรูปแบบคือ:

คุณสามารถกำหนดสีที่ต้องการใช้สำหรับไอคอน Overflow ได้ที่นั่นและไฟล์ ZIP จะรวมstyles.xmlไฟล์ที่ถูกต้องไว้ให้คุณ


1

สำหรับการเปลี่ยนสีไอคอน Overflow คุณสามารถเพิ่มได้

toolbar.setOverflowicon(getDrawable(R.id.whiteIcon));

หรือ

toolbar.setOverflowicon(getDrawable(R.id.redIcon));

มันจะเปลี่ยนไอคอนเลือกสีอะไรก็ได้ที่คุณต้องการและตั้งเป็น Overflowicon


0

หลังจากค้นหาอยู่นานสิ่งที่ฉันได้รับคำแนะนำที่จะปฏิบัติตาม:

  1. ตรวจสอบธีมในไฟล์รายการ
  2. จากนั้นไปที่ res-> values-> themes
  3. ค้นหาชื่อธีมในไฟล์นี้
  4. เพิ่มรายการภายในธีมใน theme.xml:

    <item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
  5. เพิ่มไอคอนตามสไตล์ในไฟล์เดียวกันฉันหมายถึง theme.xml:

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/icon_menu</item>
    </style>
  6. ตรวจสอบไอคอนแบบกำหนดเองที่คุณต้องการเปลี่ยนแปลง

มันได้ผลสำหรับฉัน

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