【问题标题】:how to change Android overflow menu icon如何更改Android溢出菜单图标
【发布时间】:2023-03-05 09:07:01
【问题描述】:

如何更改操作栏最右侧的溢出菜单图标,如下图所示?我的 Holo 主题默认指定这个 3 行黑色堆栈图标,我想要别的东西。我似乎找不到解决方案。我查看了http://developer.android.com/guide/topics/ui/menus.html 上的文档,但似乎没有多大帮助。

谢谢!

【问题讨论】:

  • 请不要理会那个图标。用户一次又一次地攻击不遵守基本平台约定的开发人员。除非您可以肯定地证明如果您更改该图标,您的用户将拒绝您的申请,请不要理会该图标。话虽如此,无论如何,我看不出该图标可以在哪里更改。
  • 我想改变那个图标的唯一原因是让它变成白色而不是黑色。我的操作栏背景在该区域非常暗,几乎看不到图标。我不会改变平台约定或类似的戏剧性内容:)
  • 啊,对不起,我反应过度了。有人会认为,无论您在何处控制栏的样式,都可以更改该图标。我没有在 SDK 中看到图标,所以我没有搜索字符串来尝试在 styles.xml 或 kin 中找到它。
  • Google 员工,检查此答案stackoverflow.com/a/35790470/1911652

标签: android android-3.0-honeycomb


【解决方案1】:

你可以试试这样的:

<style name="MyTheme" parent="android:style/Theme.Holo.Light">
     <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
</style>

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

在 AndroidManifest.xml 中

<application
    android:theme="@style/MyTheme" >

【讨论】:

    【解决方案2】:

    定义一个自定义样式:例如,我们称之为customoverflow

    在这种样式中,您将android:src 设置为您想要使用的图片。 现在用父 Theme.holo 创建一个样式。

    在这种风格中你需要定义:

    <item name="android:actionOverflowButtonStyle">@style/customoverflow</item>
    

    我刚刚对此进行了测试,它可以工作。

    【讨论】:

    • 它的可定制性不够。假设您有一个带有深色溢出按钮的浅色背景。如果您为动作模式 (CAB) 选择深色背景,则无法将溢出按钮切换为浅色。
    • 如何在Appcompat中实现这一点?
    【解决方案3】:

    如果您使用的是 AppCompat,您可以通过以下代码实现。

    res/values/themes.xml

    <style name="MyTheme" parent="@style/Theme.AppCompat.Light">
         <item name="android:actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
    
          <!-- Support library compatibility -->
         <item name="actionOverflowButtonStyle">@style/ActionButtonOverflow</item>
    
    </style>
    
          <style name="ActionButtonOverflow" parent="@style/Widget.AppCompat.ActionButton.Overflow">
                <item name="android:src">@drawable/ic_launcher</item>
            </style>
    

    在androidmanifest.xml中

    <application
        android:theme="@style/MyTheme" >
    

    【讨论】:

    • 优秀指出支持库兼容性差异
    【解决方案4】:

    我注意到,如果应用的主题是 Holo,它会变成白色,但当主题是 Holo.Light 时,它会变黑

    但是,将操作栏的样式更改为从 Holo 继承并从 Holo.Light 继承应用程序的其余部分并不能解决问题,但它应该指向您应该修改哪种样式的方向。

    我试过的是:

    <style name="AppThemeLight" parent="android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/ActionBar</item>
        <item name="android:windowContentOverlay">@drawable/actionbar_shadow</item>
    </style>    
    <style name="ActionBar" parent="android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">@color/header_brown</item>
        <item name="android:titleTextStyle">@style/ActionBarTitle</item>
        <item name="android:icon">@drawable/header</item>       
    </style>
    

    我有同样的问题,我认为这接近解决方案

    【讨论】:

      【解决方案5】:

      Shalafi 的解决方案进行了一些更改!您需要将 theme.Holo 指定为主题的父级,但它具有更改默认文本颜色的缺点(至少在我的样式中)。

      修改后的代码应该是:

         <style name="AppThemeLight" parent="android:style/Theme.Holo">
          <item name="android:actionBarStyle">@style/ActionBar</item>
          <item name="android:windowContentOverlay">@drawable/actionbar_shadow</item>
      </style>    
      <style name="ActionBar" parent="android:style/Widget.Holo.Light.ActionBar">
          <item name="android:background">@color/header_brown</item>
          <item name="android:titleTextStyle">@style/ActionBarTitle</item>
          <item name="android:icon">@drawable/header</item>       
      </style>
      

      【讨论】:

        【解决方案6】:

        重复的问题, Changing overflow icon in the action bar

        这是我的回答如下,

        1. 在styles.xml中改变你自定义的Actionbar溢出图标

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

        玩得开心。@.@

        【讨论】:

          【解决方案7】:

          基本上,较新 API 级别中可用的主题自定义可以进入 res/values-vXX/styles.xml,而与向后兼容性相关的自定义可以进入 values/styles.xml

          Shalafi 的解决方案有一些补充:所以 将此代码添加到res/values-vXX/styles.xmlres/values/styles.xml,这将像魔术一样工作!

          <style name="AppTheme" parent="android:style/Theme.Holo.Light">
           <item name="android:actionOverflowButtonStyle">@style/MyActionButtonOverflow</item>
          </style>
          
          <style name="MyActionButtonOverflow"parent="android:style/Widget.Holo.ActionButton.Overflow">
          <item name="android:src">@drawable/your_overflow_icon</item>
          </style>
          

          在 AndroidManifest.xml 中也添加它

          <application
              android:theme="@style/AppTheme" >
          

          【讨论】:

            【解决方案8】:
            <style name="ToolBarTheme" parent="ThemeOverlay.AppCompat.ActionBar">
                <item name="android:tint">@color/colorAccent</item>
            

            创建上述主题。使用您的颜色设置色调并将此主题添加到工具栏。

            <androidx.appcompat.widget.Toolbar
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:minHeight="?attr/actionBarSize"
                    android:theme="@style/ToolBarTheme"/>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2014-03-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-05-16
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多