android - 自定义溢出图标太大(使用 android.support.v7 和 AppCompat)

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

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

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

enter image description here

我知道这是在选择正确的图标,因为它们都是蓝色的。它必须以不同的方式调整大小,但我不知道为什么? 实际上,我在 drawable-hdpidrawable-mdpi< 中有 5 个不同颜色的放大图标drawable-xhdpidrawable-xxhdpidrawable-xxxhdpi,这样我就可以看看问题是否出在错误的图标上正在使用中。

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

enter image description here

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

使用 drawable-xxhdpi 尺寸看起来像这样:

enter image description here

我测试了一个较小的图标(drawable-mdpi 大小),将它放在 drawable 中并强制使用它(即使我的 android 使用 drawable-xxhdpi 图标), 但它最终还是被炸成了一个大尺寸:

enter image description here

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

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

编辑:以下是 Ivan 的回答结果。我下载了 24dp 版本的图标,更改了颜色,进行了测试,它成功了! :)

enter image description here

最佳答案

更多 [aka action overflow] 图标就是所谓的 system icon in Google's design spec ,并且根据规范,大小应为 24dp(与 product icon 的通常 48dp 相对)

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

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

使用图标的库存可绘制对象(即不要覆盖)并添加(我对此可能有点生疏)

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

到您的操作栏主题。

关于android - 自定义溢出图标太大(使用 android.support.v7 和 AppCompat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32450144/

相关文章:

Android可绘制资源问题

java - 繁体和简体中文不被分开拾取

java - 使用像 android.R 这样的自定义命名空间创建 android 资源库?

java - Firebase 发送 HttpPost 消息时出现错误 400

android - Android 中的 Sugar ORM : update a saved object in SQLite

android - 在 Recyclerview 中滚动后 Imageview 不在正确的行上

带有主页按钮的android自定义操作栏 View

android - 如何使用进度条?

使用 AppCompat 时,Android 的 splitActionBarWhenNarrow 在 Gingerbread 中不起作用

android - 升级到 Support Library v21 后,ActionBar aka Toolbar 为黑色