0

我正在尝试实现类似于操作栏中的图标的按钮,即在单击时更改背景颜色的透明图像。

这些是我想满足的条件:

  1. 点击后背景颜色变化
  2. 在中心包含一个小矩形
  3. 矩形可以以编程方式更改颜色

我尝试使用 aDrawable来表示矩形,然后将其设置为按钮的背景,但它扩展到按钮的边缘,因此单击时没有要更改的背景颜色(我能够使用 drawable.setColorFilter( ) 和 button.setBackground(drawable) 来改变它的颜色)。缩小按钮也会缩小触摸目标。

我还尝试使用StateListDrawable包含两个矩形形状,一个背景和一个内部矩形,因此state_pressed背景矩形会改变颜色。然而,前面的矩形再次拉伸并完全覆盖了背景矩形。

哪种方法可以达到我的条件?谢谢。

4

2 回答 2

0

有 2 个按钮状态的图像并使用它:

        boolean clicked = false
        Button btn = (Buttton)findViewById(R.id.button);

        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) 
            {
                if (clicked) 
                {
                    clicked = false;
                    btn.setBackgroundResource(R.drawable.button_image_on);
                }

                else
                {
                    clicked = true;
                    btn.setBackgroundResource(R.drawable.button_image_off);
                }
            }
        });
于 2013-05-23T13:04:47.130 回答
0

Nick Butcher 和 Roman Nurik 在Google IO 2013上关于 Android UI 设计的演讲帮助解决了这个问题。

XML 属性style="?android:borderlessButtonStyle"可以设置在一个ImageButton(甚至只是一个Button)上,以赋予它一个透明的背景,在触摸时以标准的 Holo 蓝色亮起。根据 Roman Nurik 的说法,此属性提供了“全部免费”的标准样式。

ImageButton在我的 layout.xml 文件中创建了一个包含该无边框按钮属性,然后我Drawable在 Java 中创建了我的彩色并将其放入按钮中myImageButton.setImageDrawable(myColouredDrawable);,以适应我的所有三个条件。

2013 年 7 月编辑:要使用 Jake Wharton 的 ActionBarSherlock 将 ActionBar 模式引入旧版本的 Android,请使用style="@style/Widget.Sherlock.ActionButton",或者如果使用 ActionBarCompat 支持库,请使用style="@style/Widget.AppCompat.ActionButton"

2017 年 5 月更新:对于 ImageViews(我相信它实际上是一个ImageViewCompat)我android:background="?android:attr/selectableItemBackground"在 Jellybean 上使用。

于 2013-07-16T07:33:53.960 回答