【问题标题】:Custom overflow icon is too big (Using android.support.v7 and AppCompat)自定义溢出图标太大(使用 android.support.v7 和 AppCompat)
【发布时间】:2015-12-03 16:29:02
【问题描述】:

我的目标是让操作栏为红色,但由于默认 android 库中的唯一选项是白色和黑色,因此我尝试自定义它。我使用 gimp 上的油漆桶制作了一些自定义的红色图标,只需填写白色图标并以不同的名称重新保存它。我对溢出图标做了同样的事情,但由于某种原因,它的渲染比我的其他图标大很多,这是我不想要的。

我正在使用android:minSdkVersion="15"targetSdkVersion 21 以及支持库(特别是android.support.v7)。我的活动扩展了android.support.v7.app.ActionBarActivity 并包含一个填充整个活动的片段。但是我的溢出图标比其他的大,但我希望它们的大小相同:

我知道它选择了正确的图标,因为它们都是蓝色的。肯定是以不同的方式调整大小,但我不知道为什么?我实际上在drawable-hdpidrawable-mdpidrawable-xhdpidrawable-xxhdpi 和@ 中有 5 个不同颜色的放大图标987654339@,这样我就可以看看问题是不是使用了错误的图标。

当我使用 @style/Widget.AppCompat.Light.ActionBar.Solid.Inverse 父主题附带的默认图标时,大小看起来都一样:

使用“更垂直”图标进行实验:

使用drawable-xxhdpi 大小如下所示:

我测试了一个较小的图标(drawable-mdpi 大小),将其放入 drawable 并强制使用它(即使我的 android 使用 drawable-xxhdpi 图标),但它最终被炸得很大无论如何大小:

这是我使用的自定义主题代码:

<style name="NGT48Theme"
           parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/NGT48ActionBar</item>
        <item name="android:windowBackground">@color/white</item>
        <item name="actionBarStyle">@style/NGT48ActionBar</item>
        <item name="android:actionOverflowButtonStyle">@style/NGT48Theme.OverFlow</item>
        <item name="actionOverflowButtonStyle">@style/NGT48Theme.OverFlow</item>
    </style>

<!-- ~~~~~~~~~~~~~~~~~~~~  ActionBar styles ~~~~~~~~~~~~~~~~~~~~ -->
<style name="NGT48ActionBar"
       parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/white</item>
    <item name="background">@color/white</item>
    <item name="android:titleTextStyle">@style/NGT48ActionBarTitleTextStyle</item>
    <item name="titleTextStyle">@style/NGT48ActionBarTitleTextStyle</item>
</style>

<!-- ~~~~~~~~~~~~~~~~~~~ ActionBar Title Text Styles ~~~~~~~~~~~~~~~ -->
    <style name="NGT48ActionBarTitleTextStyle"
           parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
           >
        <item name="android:textColor">@color/red_NGT48</item>
    </style>


    <!-- ~~~~~~~~~~~~~~~~~~~ Overflow Icon Styles ~~~~~~~~~~~~~~~ -->
    <style name="NGT48Theme.OverFlow" parent="@style/Widget.AppCompat.ActionButton.Overflow">
        <item name="android:src">@drawable/ic_zoom_in_red_48dp</item>
    </style>

编辑:这是伊万回答的结果。我下载了 24dp 版本的图标,改变了颜色,测试了它,它工作了! :)

【问题讨论】:

  • 你如何证明图标大小不正确?
  • @CoasMckey 因为它太大了
  • 您可以调整所有目录中的图标大小
  • @CoasMckey 没用
  • xxhdpi 图标的分辨率是多少?

标签: android android-actionbar android-resources android-styles android-icons


【解决方案1】:

more [aka action overflow] 图标是所谓的system icon in Google's design spec,根据规范,大小应为24dp(与通常不同48dpproduct icon)

因此,对于xxhdpi,您的图标大小应为72px。您还可以查看原始材料图标。对于appcompat,它的位置是../appcompat-v7/[version]/res/drawable-xxhdpi/abc_ic_menu_moreoverflow_mtrl_alpha.png

附言 实际上,如果您只需要更改 more 按钮的颜色(以及我从屏幕截图中看到的文本),另一种选择是仅使用 tinting 为项目着色. Appcompat 支持工具栏中的所有小部件,股票图标是无色且启用 alpha 的,以允许着色。

使用图标的 stock drawable(即不要覆盖)并添加(我可能对此有点生疏)

// Text color
<item name="android:textColorPrimary">@color/red</item>
// Icon color
<item name="android:textColorSecondary">@color/red</item>

到您的操作栏主题。

【讨论】:

  • 非常感谢!!我试过了,它现在确实有效!我在原始帖子中放了一张图片以显示结果。
  • @RockLee 没问题,伙计:)
  • @RockLee 另外,请检查答案的 PS 部分,我认为有一种更简单的方法可以实现您的目标。
【解决方案2】:

你可以在 res 目录中创建一个 Image Asset,只需选择;图标类型:(操作栏和选项卡图标)和资产类型:(图像),添加您的图像就完成了。添加新的可绘制资源

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多