Android Button可绘制的问题

时间:2013-05-23 12:57:16

标签: android android-button android-drawable

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

这些是我想要满足的条件:

  1. 点击
  2. 后背景颜色发生变化
  3. 在中间包含一个小矩形形状
  4. 矩形可以通过编程方式更改颜色
  5. 我尝试使用Drawable来表示矩形,然后将其设置为按钮的背景,但它扩展到按钮的边缘,因此单击时没有要更改的背景颜色(I能够使用drawable.setColorFilter()和button.setBackground(drawable)来改变它的颜色。缩小按钮也缩小了触摸目标。

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

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

2 个答案:

答案 0 :(得分: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);
                }
            }
        });

答案 1 :(得分:0)

Nick Butcher和Roman Nurik在Android UI设计上的

This talk from Google IO 2013帮助解决了这个问题。

可以在style="?android:borderlessButtonStyle"(或者甚至只是ImageButton)上设置XML属性 Button ,使其具有透明背景,在标准的Holo蓝色触感。根据Roman Nurik的说法,这个属性提供了“全部免费”的标准样式。

我在layout.xml文件中创建了一个包含无边框按钮属性的ImageButton,然后我用Java创建了我的彩色Drawable并使用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)我在Jellybean上使用 android:background="?android:attr/selectableItemBackground"