gpt4 book ai didi

java - 仅更改 ImageButton 背景的一种状态(默认状态)

转载 作者:太空狗 更新时间:2023-10-29 12:48:08 26 4
gpt4 key购买 nike

我想更改图像按钮的背景。基本上,我的图像在透明背景上看起来很棒,但当有一堆图像都具有非透明背景时有点糟糕。

这应该很简单 - 只需将按钮上的 android:background 更改为透明颜色(通过可绘制对象):点击背景.xml

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

<item android:state_focused="true"><color android:color="#FF008080" />
</item>
<item android:state_pressed="true"><color android:color="#FF008080" />
</item>
<item><color android:color="#00000000" />
</item>

</selector>

然后是按钮

<ImageButton
android:id="@+id/players"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center"
android:background="@drawable/click_background"
android:contentDescription="@string/players"
android:src="@drawable/speaker_tile" />

问题 是我实际上想保留背景的 state_focussedstate_pressed 版本(我认为这是从主题派生的).我希望在按下或选择按钮时出现背景(并以完全相同的颜色/可绘制对象出现),当按下按钮时主题通常使用的背景会有所帮助。

我想知道是否有办法执行以下操作之一,但到目前为止都找不到任何方法:

  1. 定义一个选择器,在某种程度上继承另一个选择器(类似于主题可以从另一个继承的方式)。

  2. 创建一个全新的选择器,但让它的 XML 引用主题的 state_focussed 和用于图像按钮的 state_pressed 的颜色/可绘制对象。 编辑:看起来这个选项已经过时了。我本来需要属性,但您不能从可绘制对象中引用它们。 See here

如果可能的话,我希望使用声明式 XML 而不是编程式 Java 来执行此操作。

最佳答案

您可以将 Android 操作系统使用的可绘制对象复制到您的项目中,并在状态列表可绘制对象中使用它们。您可以在 {android-sdk-directory}/platforms/android-##/data/res/drawable[-*dpi] 中找到图像

编辑:如果你去 {android-sdk-directory}/platforms/android-##/data/res/values ,你会发现 themes.xmlstyles.xml Android 使用的文件。使用它们,您可以确定要查找的可绘制对象。

例如,较新版本的 Android 的默认主题是 Theme.Holo .这个主题有一个 ImageButtons 的默认样式,声明如下:

<item name="imageButtonStyle">@android:style/Widget.Holo.ImageButton</item>

styles.xml ,该样式定义如下:

<style name="Widget.Holo.ImageButton" parent="Widget.ImageButton">
<item name="android:background">@android:drawable/btn_default_holo_dark</item>
</style>

谢天谢地,背景属性就在那里定义得一目了然。有时它是从父样式继承的,您必须找到它。无论如何,这是可绘制对象(在 /drawable 目录中找到,因为它是 xml):

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:state_enabled="true"
android:drawable="@drawable/btn_default_normal_holo_dark" />
<item android:state_window_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_default_disabled_holo_dark" />
<item android:state_pressed="true"
android:drawable="@drawable/btn_default_pressed_holo_dark" />
<item android:state_focused="true" android:state_enabled="true"
android:drawable="@drawable/btn_default_focused_holo_dark" />
<item android:state_enabled="true"
android:drawable="@drawable/btn_default_normal_holo_dark" />
<item android:state_focused="true"
android:drawable="@drawable/btn_default_disabled_focused_holo_dark" />
<item
android:drawable="@drawable/btn_default_disabled_holo_dark" />
</selector>

这些是 Android 在默认(全黑)主题中用作标准 ImageButton 背景的可绘制对象。

关于java - 仅更改 ImageButton 背景的一种状态(默认状态),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15735397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com