Android:使用选择器更改按钮背景图像和颜色

2024-03-29

我有一个按钮,我将其背景设置为特定selector.
选择器当前更改按钮背景并更改图像作为背景。
我还希望更改背景颜色(图像是周围有透明空间的图标)。
这是选择器:

    <?xml version="1.0" encoding="utf-8"?>
        <selector 
            xmlns:android="http://schemas.android.com/apk/res/android" >
        <!-- default -->
        <item 
            android:state_pressed="false" 
            android:state_focused="false"
            android:drawable="@drawable/menu_button_collapsed" >
        </item>

        <!-- button focused -->
        <item 
            android:state_pressed="false" 
            android:state_focused="true"
            android:drawable="@drawable/menu_button_collapsed_highlight" 
            android:drawable="@drawable/button_background" >
        </item>

       <!-- button pressed -->
        <item 
            android:state_pressed="true" 
            android:state_focused="false"
            android:drawable="@drawable/menu_button_collapsed_highlight"
            android:drawable="@drawable/button_background" >
        </item>
    </selector>

正如你所看到的,我设置了drawable属性两次,这是非法的,但这正是我想要的。
Notice @drawable/button_background只是一种颜色


创建一个新的<layer-list>可绘制的

自定义按钮.xml

<?xml version="1.0" encoding="utf-8"?>        
        <layer-list xmlns:android="http://schemas.android.com/apk/res/android">

           <!-- Your background color goes first -->
           <item 
             android:id="@android:id/background"
             android:drawable="@drawable/button_background" />

           <!-- Your button icon image -->
           <item 
             android:id="@android:id/button_image"
             android:drawable="@drawable/menu_button_collapsed_highlight" />

        </layer-list>

并在您的选择器可绘制文件中引用它

<?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android" >

        <!-- default -->
        <item 
            android:state_pressed="false" 
            android:state_focused="false"
            android:drawable="@drawable/menu_button_collapsed" 
         />            

        <!-- button focused -->
        <item 
            android:state_pressed="false" 
            android:state_focused="true"
            android:drawable="@drawable/custom_button" 
            />

        <!-- button pressed -->
        <item 
            android:state_pressed="true" 
            android:state_focused="false"
            android:drawable="@drawable/custom_button" 
         />
    </selector>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android:使用选择器更改按钮背景图像和颜色 的相关文章

随机推荐

  • 按日期连接两个 data.table,表 1 中最接近的日期严格小于第二个表中的日期

    从 SO 上其他地方窃取一个虚拟示例 按确切日期加入 data table 如果不是 则按最近的小于日期加入 data table https stackoverflow com questions 11341557 join data t
  • Graphviz中如何使边重叠?

    我想在 graphviz 中使边缘重叠 但 graphviz 似乎重新排列了叶节点以避免重叠 我可以强制 graphviz 停止重新排列节点吗 制作 Desired 我正在使用 pygraphviz 创建树 使用以下方法额外的隐形边缘非常适
  • 使用 SelectionModel 或 ListDataProvider 选择 CellList 中的元素

    我使用 CellList 列出数据 使用 ListDataProvider 管理数据 使用 SelectionModel 从 CellList 中选择元素并相应地生成事件 现在 当我使用 cellList getList set index
  • 使用Azure B2C登录时如何在自定义页面中嵌入登录控件

    我正在使用 Azure AD B2C 示例 出于测试目的 我使用稍作修改的单页应用程序sample https github com Azure Samples active directory b2c javascript msal si
  • 如何防止创建空对象

    我正在尝试将每个列表都位于嵌套对象内部的网络服务模型映射到更简单的东西 Model 1 public class Parent private Children children public class Children private
  • 如何在Python中从邻接矩阵创建边列表数据框?

    我有一个 pandas 数据框 将其视为网络中节点的加权邻接矩阵 的形式 df A B C D A 0 0 5 0 5 0 B 1 0 0 0 C 0 8 0 0 0 2 D 0 0 1 0 我想获得一个代表边缘列表的数据框 对于上面的例子
  • PHPstorm项目导航

    如何在PHPstorm项目列表中选择打开的文件 我的意思是 PHPstorm 有一个 在项目中选择 Netbeans 功能的模拟 Navigate View在旧版本中 Select In Project View 也可以启用Autoscro
  • NuGet 将 DLL 文件放在哪里?

    我正在尝试解决 NuGet 的问题源代码控制限制 https stackoverflow com questions 7015149 multiperson team using nuget and source control 为此 我需
  • 使用关联数组作为 D3 的数据

    我有一个非常简单的 D3 示例 它首先将数据读入关联数组 然后将其显示在条形图中 不过 我似乎无法使用此方法显示任何内容 相反 我必须在两者之间插入一个任务 将数据读取到关联数组中 将该数据复制到一个简单数组中 然后使用该简单数组显示条形图
  • 获取可用(语言)resx 文件的列表

    许多程序都有社区 在应用程序发布后向其添加语言 因此 在程序的设置窗口中 人们可以看到可用语言的下拉列表 那么 人们在使用 resx 文件进行本地化时如何编码呢 我在网上搜索了一遍又一遍 但找不到任何答案 一切都运行良好 但现在 我需要制作
  • 如何在 pom.xml 文件中指定 Java 编译器版本?

    我在 Netbeans 中编写了一些 Maven 代码 大约有 2000 多行 当我在 Netbeans 上编译它时 一切都很好 但如果我想在命令行上运行它 我会收到以下错误 generics are not supported in so
  • JavaScript 风格的警报系统

    我在用smoke js http ssssnakes com smoke 它允许设置经典警报 javascript 窗口的样式 您所要做的就是放置 smoke在警报之前 即 smoke confirm 我遇到的问题是确定 取消回调 它对我不
  • 创建“拼写检查”,以合理的运行时间检查数据库

    我不是在询问如何实现拼写检查算法本身 我有一个包含数十万条记录的数据库 我想要做的是针对所有这些记录的表中的特定列检查用户输入 并返回具有特定汉明距离的任何匹配项 同样 这个问题不是关于确定汉明距离等 当然 目的是创建一个 您的意思是 功能
  • pyspark 中的交叉验证

    我使用交叉验证来训练线性回归模型 使用以下代码 from pyspark ml evaluation import RegressionEvaluator lr LinearRegression maxIter maxIteration m
  • HMC SHA1 哈希 - Java 生成与 C# 不同的哈希输出

    这是后续this https stackoverflow com questions 7175067 hmc sha1 hash c sharp producing different hash output than ruby问题 但我正
  • C# - 调整图像画布大小(保持源图像的原始像素尺寸)

    我的目标是获取图像文件并将尺寸增加到 2 的下一个幂 同时保留像素原样 也称为不缩放源图像 因此基本上最终结果将是原始图像 加上跨越图像右侧和底部的额外空白 因此总尺寸是 2 的幂 下面是我现在正在使用的代码 它创建了具有正确尺寸的图像 但
  • 在 Linux 上获取机器 ID 的最佳方法?

    获取唯一机器 ID 的最佳实践方法是什么GNU Linux for i386建筑学 除了这个还有什么好的办法吗mac地址 根据您的内核 DMI 信息可能可以通过 sysfs 获得 尝试一下 cat sys class dmi id boar
  • git-svn rebase 和 dcommit 问题

    git version 1 7 1 svn version 1 6 12 Ubuntu 10 10 我只有 git 我用过 svn 不过我没一起用过 我有一个 git 存储库 我必须将我的存储库升级为 subversion 存储库 所以我一
  • Drupal 7中用户的图片存储在哪里?

    我正在使用 SelectQuery 对象来检索和显示用户列表 但我不知道从哪里获取用户的图片 users 表有一列名为 picture 但其中的数据只是一个整数 图片是否存储在某个 blob 字段中 或者是否存在指向另一个表中图片的链接 图
  • Android:使用选择器更改按钮背景图像和颜色

    我有一个按钮 我将其背景设置为特定selector 选择器当前更改按钮背景并更改图像作为背景 我还希望更改背景颜色 图像是周围有透明空间的图标 这是选择器