7

(现在我在 StackOverflow 上遇到了相关问题,但不幸的是,没有一个解决方案对我有用,这就是为什么我不得不单独提出这个问题)

我是安卓新手。问题:我需要一个充当按钮的图像。现在我知道这可以通过在标准按钮上使用图像或使用称为“ImageButton”的东西来实现(我想强烈推荐它,尽管我不知道为什么)。

要求:我需要详细的指导来解决这个问题。具体来说,我认为“将图像放在标准按钮上”更容易,直到我遇到两个主要问题:我无法将图像设置在中心(感谢 drawable-top、bottom、left6、right)和一旦我更改背景颜色以匹配活动屏幕的背景颜色,按钮效果消失。简而言之,我需要一种适度简单的方法,让图像充当按钮或带有图像的按钮,该图像具有所有三种效果:聚焦、按下和默认。我使用了 ImageButton,但后来我不知道如何制作自定义形状或 9patch 图像来给它所有想要的效果,我对 android 提供的默认按钮非常满意。

有人可以帮我解决这个问题吗?我需要 UI 看起来不错,因此我的图像/按钮需要相应的效果。提前致谢 :)

这是我的图标图像: 在此处输入图像描述

我希望对此有某种悬停效果,表明图像已像任何普通按钮一样被按下。

4

3 回答 3

19

使用ImageButtonStateList Drawable。您需要针对不同按钮状态的选择器。您可以为不同的状态分配不同的可绘制对象,以模仿普通按钮的onFocus oronPressed 效果。

这是selector.xmldrawable文件夹下res

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" 
      android:drawable="@color/cyan"/> <!-- pressed state -->
<item android:state_focused="true" 
      android:drawable="@color/cyan"/> <!-- focused state -->
<item android:drawable="@android:color/transparent"/> <!-- default state -->

</selector>

这是color.xmlvalues文件夹下res

<?xml version="1.0" encoding="utf-8"?>
<resources>
        <color name="cyan">#33B5E5</color>
</resources>

ImageButton's设置src为您的图像并将 's 设置backgroundselector.xml.

这是最终结果:

前 后

这里有一个很好的教程:Android ImageButton Selector Example

于 2013-06-17T10:49:45.167 回答
2

如果有人对此仍有疑问。我创建了选择器,但将可绘制对象引用到两个不同的图像文件,并使用 imagebutton 中的 XML 作为源。它就像一个魅力。

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/btn_add_pressed"
        android:state_pressed="true" />
    <item android:drawable="@drawable/btn_add"
        android:state_focused="true" />
    <item android:drawable="@drawable/btn_add" />
</selector>

图片按钮如下所示:

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/add_button_selector"
        android:background="@null"/>
于 2017-12-12T09:31:13.033 回答
1

创建xml视图

<ImageView
 android:id="@+id/imageview1"
 android:background="@drawable/selector_xml_name"
 android:layout_width="200dp"
 android:layout_height="126dp"/>

在可绘制文件夹中创建 selector_xml_name.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">    
<item android:drawable="@drawable/numpad_button_bg_selected"android:state_selected="true"></item>
<item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/numpad_button_bg_normal"></item>

在可绘制文件夹 numpad_button_bg_selected.xml 内创建

 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
 <solid android:color="@color/selected"/>
 <padding />
 <stroke android:color="#000" android:width="1dp"/>
 <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>

于 2016-01-02T05:07:28.293 回答