Mengubah ikon luapan di bilah tindakan

Jawaban:

255

Anda bisa dengan gaya, tetapi Anda harus menambahkannya ke deklarasi Tema utama.

<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>

Anda juga dapat mengubahnya secara dinamis, yang akan saya bahas secara detail di sini:

Mengubah ikon menu Android Overflow secara terprogram

adneal
sumber
1
Saya telah menemukan solusi ini dengan mencari kode sumber, tetapi terima kasih :) Ini adalah jawaban yang bagus.
pjanecze
6
CATATAN bahwa ini diterapkan ke TEMA, dan bukan GAYA. Apakah saya terjebak untuk sementara waktu sampai saya menyadarinya. Thx @aneal
Richard Le Mesurier
5
Ini akan mogok pada tablet yang menjalankan Android 3.0 (API 11), karena tidak suka orang yang mendefinisikan gaya "android: actionOverflowButtonStyle" (mungkin bug platform). Jadi, Anda harus menggunakan gaya yang berbeda dalam values-v11 / styles.xml dan values-v15 / styles.xml.
Mr-IDE
10
Dan untuk pengguna ActionBarSherlock, gaya induknya adalah:parent="Widget.Sherlock.ActionButton.Overflow"
Nick White
7
Untuk appcompat (toh v21 lollipop), parent="@style/Widget.AppCompat.ActionButton.Overflow"sepertinya berhasil untuk saya.
menggemukkan
16

Bagi mereka yang tidak bisa membuatnya bekerja, coba ini TANPA namespace "android:".

<item name="actionOverflowButtonStyle">@style/OverFlow</item>
pengguna2968401
sumber
Terima kasih sobat, ini sangat membantu. Adakah yang punya penjelasan untuk ini?
DaMachk
4
@DaMachk Jika Anda menggunakan AppCompat, jangan sertakan namespace "android:".
matiash
4
  1. Ubah ikon luapan kustom Anda dari Actionbar di 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. Letakkan tema khusus "Tema Saya" di tag aplikasi AndroidManifest.xml

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

Selamat bersenang-senang.@.@

Luna Kong
sumber
4

Tidak peduli apa yang saya coba lakukan styles.xml, tidak ada solusi yang berhasil untuk saya. Pada akhirnya, jika Anda memiliki AppCompat 23+, yang seharusnya Anda lakukan, ini adalah cara termudah yang benar-benar berfungsi:

toolbar.setOverflowIcon(drawable);
Starwave
sumber
Cara paling akurat yang saya temukan!
Shubhamhackz
1

Jawaban @adneal benar (jadi ini hanya penjelasan wiki komunitas untuk mengembangkannya).

Salah satu komentar menyarankan bahwa mungkin ada kesalahpahaman bagaimana melakukan ini, jadi jawaban saya hanyalah contoh lain tentang cara menimpa gambar ikon Overflow.

Kode di bawah ini didasarkan pada gaya template dari sampel ADT New Android Project. Kode berasal dari styles.xmlfile di res/valuesfolder.


<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>

Apa yang dilakukan kode di atas ini adalah mengganti ikon luapan default dengan drawable apa pun yang Anda miliki yang dinamai ic_menu_moreoverflow. Jika Anda ingin cara cepat untuk mengujinya, gunakan nama file ikon peluncur aplikasi Anda, yang akan menjelaskan cara kerjanya.

Sumber daya yang berguna untuk digunakan saat mencoba memahami ActionBargaya, adalah:

Di sana Anda dapat menentukan warna tertentu yang akan digunakan untuk ikon Overflow Anda, dan file ZIP akan menyertakan styles.xmlfile yang benar untuk Anda.

Richard Le Mesurier
sumber
1

Untuk perubahan warna ikon Overflow, Anda tinggal menambahkan

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

atau

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

Ini akan mengubah ikon, pilih warna apa pun yang Anda inginkan dan atur sebagai ikon Overflow.

Navin Kumar
sumber
0

Setelah lama mencari apa saya mendapat panduan untuk diikuti seperti:

  1. Periksa tema di file manifesto.
  2. Lalu pergi ke res-> nilai-> tema.
  3. Temukan nama tema di file ini.
  4. Tambahkan item di dalam tema di theme.xml:

    <item name="android:actionBarWidgetTheme">@style/widgetStyle</item>
    <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
  5. Tambahkan ikon dengan gaya di file yang sama yang saya maksud theme.xml:

    <style name="MyActionButtonOverflow" parent="android:style/Widget.Holo.ActionButton.Overflow">
    <item name="android:src">@drawable/icon_menu</item>
    </style>
  6. Lihat ikon khusus yang ingin Anda ubah

Itu berhasil untuk saya

Issac Balaji
sumber