不同的Android SDK版本使用不同的图标

2024-04-18

我的 Android 菜单有图标。在 Android 3+ 上,我使用黑色 ActionBar,因此图标为白色。然而,在 Android 2.x 上,菜单本质上是白色的,这意味着图标几乎不可见。如何为不同版本使用不同的菜单图标?我假设我可以使用不同的可绘制目录(例如 res/drawable-mdpi-v11)来完成此操作,但我想知道是否还有另一种方法,这样我在添加版本或像素时就不必创建一堆不同的目录密度。

编辑:我将深色版本放在 res/drawable-mdpi 和 res/drawable-hdpi 中以与 Android 2.x 一起使用,并将浅色版本放在 res/drawable-mdpi-v11 和 res/drawable-hdpi-v11 中以与 Android 一起使用3.x 及更高版本,但我的 Android 2.1 (sdk 7) 模拟器仍然显示精简版本。

知道为什么吗?


您可以根据平台版本选择主题,如风格和主题 http://developer.android.com/guide/topics/ui/themes.html#SelectATheme开发指南。在 res/values/styles.xml 中定义样式,如下所示:

<style name="ThemeSelector" parent="android:Theme.Light">
    ...
</style>

然后在 res/values-v11/ 文件夹中,选择你的主题(如果你是黑暗的,可能是 Holo)

<style name="ThemeSelector" parent="android:Theme.Holo">
    ...
</style>

然后将图标添加到该样式。例如,这是来自 styles.xml 文件的片段蜂巢画廊 http://developer.android.com/resources/samples/HoneycombGallery/index.html示例应用程序。

<style name="AppTheme.Dark" parent="@android:style/Theme.Holo">
    ...
    <item name="menuIconCamera">@drawable/ic_menu_camera_holo_dark</item>
    <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_dark</item>
    <item name="menuIconShare">@drawable/ic_menu_share_holo_dark</item>
</style>

底部 3 个元素都是可绘制目录中的图标。对于每个特定于分辨率的图标集,您仍然需要至少一个文件夹,但您可以将浅色和深色图标组合到同一文件夹中,但不必为每个平台版本拥有不同的图标文件夹。此外,您还需要将它们列为values/attrs.xml 文件中的引用,如下所示:

<resources>
  <declare-styleable name="AppTheme">
    <attr name="listDragShadowBackground" format="reference" />
    <attr name="menuIconCamera" format="reference" />
    <attr name="menuIconToggle" format="reference" />
    <attr name="menuIconShare" format="reference" />
  </declare-styleable>
</resources>

此时,您将能够使用“?attr/NameOfYourDrawable”取消引用在布局 XML 中引用它们,如下所示:

<item android:id="@+id/menu_camera"
      android:title="@string/camera"
      android:icon="?attr/menuIconCamera"
      android:showAsAction="ifRoom" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

不同的Android SDK版本使用不同的图标 的相关文章

  • 意图?如何注册以获得传入电子邮件提醒?

    这里是极限 Android 开发新手 好吧 Android 开发新手 而不是一般开发 我想编写一个应用程序 当电子邮件进入设备时会收到通知 并根据电子邮件中的数据 主题 发件人 收件人等 采取各种操作 我认为我要做的是创建一个带有 Inte
  • OPENGL ES 不工作:无当前上下文

    我尝试了 OpenGL ES2 for Android 一书中所示的程序 但它不起作用 我已经在Odroid E 三星s3 三星y 三星star上进行了测试 the gl version suported returns 2 but i g
  • 添加动态数据时 footable 出现问题

    我需要 jQuery Mobile 方面的一些帮助富表 http css tricks com footable a jquery plugin for responsive data tables 我正在表中动态添加数据 HTML tab
  • 导航组件参数默认值

    在导航组件中 将参数从第一个片段发送到第二个片段时 默认值不会从导航图中获取哪个集合 这是我的代码 导航图 xml
  • 有没有办法将搜索栏添加到我的实际首选项屏幕?

    我一直看到有关添加您自己的搜索栏首选项的教程 但它不在我实际的 prefs xml 中 有什么方法可以在我的主偏好设置屏幕中添加一个 或者我必须将其分开 Google 似乎有 2 个滑块首选项 搜索栏首选项 https github com
  • 编译后从字节代码中删除注释

    我们正在使用一个包含使用 JAXB 注释进行注释的 bean 的库 我们使用这些类的方式完全不依赖于 JAXB 换句话说 我们不需要 JAXB 也不依赖注释 但是 由于注释存在 它们最终会被处理注释的其他类引用 这要求我将 JAXB 捆绑到
  • 维护 HttpUrlConnection 调用之间的会话(Native/Webview)

    让我从我做的开始desire 我想制作一个应用程序part native and part webviews Problem 维护本机和 webview 部分之间的会话 My 处理方法 this 我打算实现一个本机登录 其中我向用户展示两个
  • 如何在 Android 应用程序中单击按钮时打开 Gmail Compose?

    当我的 Android 应用程序中单击按钮时 我尝试打开 Gmail 撰写屏幕 我需要 Google 提供的 API 密钥吗 或者我需要在按钮 onClickListener 中做什么 任何形式的见解都非常值得赞赏 正如 JeffC 指出的
  • 需要在 Android 中伪造正在扫描的 NFC 标签

    好的 我有一个应用程序 此应用程序仅在扫描 NFC 标签 任何标签 时才会完成任务 唯一的问题是 我没有任何 nfc 标签 无论如何 我正试图消除对卡的需要 所以我需要的是一种 伪造 使其看起来 就像已扫描 nfc 标签的方法 我可以编写应
  • 在后台服务中持续获取位置更新

    我正在开发需要在后台服务中持续获取位置更新的应用程序 我已经使用了它正在使用的后台粘性服务 但是 即使我添加了启动广播并在那里启动了服务 启动完成后服务也没有启动 服务启动并立即被杀死 另外 这不适用于奥利奥 服务在应用程序关闭几分钟后停止
  • 使用 RxJava 限制吞吐量

    我现在遇到的情况很难解释 所以我会写一个更简单的版本来解释这个问题 我有一个Observable from 它发出一系列由ArrayList文件数量 所有这些文件都应上传到服务器 为此 我有一个函数可以完成这项工作并返回一个Observab
  • Android BLE 扫描在后台几分钟后停止

    当我为公司开发新冠肺炎接触者追踪应用程序时 我在后台遇到了 Android 扫描停止问题 这是我尝试过的 添加前台服务 禁用手机中所有与电池相关的优化选项 启用后台运行的应用程序 测试设备 搭载 Android 10 的 Galaxy S2
  • android 多关键词搜索

    我的应用程序包含搜索功能 它将搜索数据库内的内容 我的搜索的弱点是 我只能使用一个标签进行搜索 例如我只能搜索 猫 它会返回我的数据库中包含 猫 一词的内容 因为我正在使用LIKE在 select 语句期间进行查询 如何使用多个标签进行搜索
  • Android httpclient文件上传数据损坏和超时问题

    我在 Android 中上传图像时遇到问题 我正在使用 apache httpmime 4 1 lib 代码是这样的 MultipartEntity reqEntity new MultipartEntity HttpMultipartMo
  • 有没有办法在多个嵌套的 RecyclerView 之间共享同一个 LayoutManager

    我正在开发一个显示游戏列表的应用程序 在每个游戏的 itemView 内 我还有一个要显示的视频列表 预览和结构如下 我部署了一个RecyclerView作为窗口根视图 然后对于视频 我使用网格样式的RecyclerView来显示 所以这里
  • 在 android 版本 7.0 上膨胀类 android.widget.DatePicker 时出错

    我想显示弹出日期选择器并且我使用此代码 Calendar mcurrentDate Calendar getInstance int mYear mcurrentDate get Calendar YEAR int mMonth mcurr
  • 在 android 中,第一次单击时按钮侦听器未注册

    因为我是 Android 新手 所以我遇到了按钮监听器的问题 我正在使用 OnClickListener 来处理胸像 但它第一次点击后不执行一旦我单击多个 它就会表现良好 但如何使其在第一次单击时成为可能 这是我的代码 public cla
  • 改造方法调用可能会产生“java.lang.NullPointerException”

    使用 Retrofit 2 3 0 我在 Android Studio 中收到以下消息 有关如何删除此 IDE 错误消息的任何建议 谢谢 来自Response文档 http square github io retrofit 2 x ret
  • Application.onLowMemory() 未调用

    我创建了自己的应用程序类 我尝试调试它 代码在 Application onCreate 处停止 但不会在 onLowMemory 处停止 为了测试该场景 我打开了许多其他高内存应用程序 我看到的是调试会话终止 在 Eclipse 中 并且
  • Android Espresso - 如果未选中,请单击复选框

    I have onView withId R id check box perform click 但我只想在尚未选中该复选框时执行此操作 我怎样才能在浓缩咖啡中做到这一点 我还想根据其之前的状态来切换复选框 开关 起初 我尝试用此方法打开

随机推荐

  • 使用 Google Drive API 从 Google Drive 直接下载

    我的桌面应用程序是用 java 编写的 尝试从 Google Drive 下载公共文件 据我发现 它可以通过使用文件来实现webContentLink 这是为了能够在未经用户授权的情况下下载公共文件 因此 下面的代码适用于小文件 Strin
  • 如何将两个或多个不同 csv 文件组成的数据框中的两列合并为一个新列?

    我有几个 csv 文件 全部以日期命名 对于所有文件 我想在每个文件中创建一个新列 其中包含来自其他两列放在一起的数据 然后 我想将它们组合成一个大数据框 并仅选择其中两列来保留 这是一个例子 假设我有两个数据框 a b c a b c x
  • Rails 的 javascript_include_tag 可以忽略之前加载的脚本吗?

    我正在使用这条线 javascript include tag all recursive gt true cache gt true 在 Rails 应用程序的页脚中执行以下操作 递归加载public javascripts下的所有脚本
  • 传递给子指令时父指令控制器未定义

    我在这里问了一般性问题这个帖子 https stackoverflow com questions 42814530 pass argument between parent and child directives 我已经通过工作示例得到
  • 将 RavenDB 与 ServiceStack 结合使用

    I read this http www philliphaydon com 2012 06 using nhibernate with servicestack Phillip Haydon 发表的有关如何将 NHibernate Rav
  • ndk-build DUMP_APP_ABI 在 Windows 上返回 2 行

    我无法在 Windows 上调试 android ndk 应用程序 它seems https stackoverflow com questions 20047348 unknown application abi while debug
  • MySQLdb 使用列表作为输入执行许多?

    我想在我的程序中使用executemany一次存储20条记录 这就是文档中所说的 c executemany INSERT INTO breakfast name spam eggs sausage price VALUES s s s s
  • 为什么实体框架在 SELECT 上生成 JOIN

    我在 C 应用程序中使用实体框架 并且使用延迟加载 我们注意到一个查询对我们的 CPU 有着极高的影响 它仅仅计算一个总和 调试实体框架生成的查询时 它会创建一个INNER JOIN SELECT 这不是高性能的 当我手动将查询更改为正确的
  • magento 付款流程..一般如何运作

    有一个问题 我希望这是问的正确地方 不太明白magento 中的付款方式 客户去结账 假设想要以客人身份付款 因此提供地址等 最后找到付款方式 然后我希望客户通过信用卡付款 已经为我选择的网关 银行 安装了模块 那时 我希望用户被重定向到第
  • Mysql 变量无法通过 php mysql 查询工作

    我有这样的疑问 query SET points 1 SET num 0 SELECT id rank num if points rank num num 1 as point rank FROM said ORDER BY rank 1
  • 调用静态方法时发生致命错误

    所以 这是我的情况 我正在使用 CodeIgniter 我已经设置了一个助手 DK 文件夹下的 string helper 我已经在 dk string helper php 中设置了 dkString 类 static function
  • 测量 OpenMP Fork/Join 延迟

    由于 MPI 3 具有共享内存并行功能 并且它似乎与我的应用程序完美匹配 因此我正在认真考虑将我的混合 OpemMP MPI 代码重写为纯 MPI 实现 为了给棺材里钉上最后一颗钉子 我决定运行一个小程序来测试 OpenMP fork jo
  • 私人变更的用例

    假设我有以下场景 我克隆了一些开源项目 例如从 URL X 克隆的项目 现在我有了它的本地克隆 我对本地克隆进行了一些更改以尝试并在本地提交它们 现在我想要的是以下内容 我想从开源项目 X 获取更新 只需获取其所有最新代码 无需我进行任何更
  • 使用 Google 进行 OWIN 身份验证

    我在 ASPNET MVC 项目上使用 owin 身份验证 使用google时遇到以下问题 1 用户使用google帐户登录 2 用户退出 3 下次用户尝试登录时 将自动使用当前的google帐户再次登录 而不提示用户是否要使用其他帐户 问
  • gdb nostop SIGSEGV 在特定线程上

    我有一个程序故意在一个线程上出现段错误 但我有一个问题 另一个线程出现段错误 我想用 GDB 捕获它 我看到我可以 handle SIGSEGV nostop noprint 但我只想在故意这样做的线程上这样做 有可能吗 我会解释一下 我有
  • extern auto 变量没有初始值设定项

    我需要在我的 C 程序中使用全局时间戳 std chrono high resolution clock now 我在头文件Header h中声明了它 include
  • Tomcat 10 上的 Spring Boot 2.x 问题

    我试图在 Tomcat Docker 容器中部署一个 war 文件 但总是得到404 Not Found页 我通过以下方式创建了 Spring Boot 项目Intellij 教程 https www jetbrains com help
  • javascript 在多个链式异步函数上等待

    假设我有以下内容 const a new A await a getB action A prototype getB is async也B prototype action 如果我尝试等待函数的链接 则会收到错误 TypeError a
  • SoapExtension 未加载

    我正在尝试写一个肥皂扩展 但框架没有加载它 我已经添加到 web config
  • 不同的Android SDK版本使用不同的图标

    我的 Android 菜单有图标 在 Android 3 上 我使用黑色 ActionBar 因此图标为白色 然而 在 Android 2 x 上 菜单本质上是白色的 这意味着图标几乎不可见 如何为不同版本使用不同的菜单图标 我假设我可以使