【问题标题】:Android Button drawable issueAndroid Button 可绘制问题
【发布时间】:2013-05-23 12:57:15
【问题描述】:

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

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

  1. 点击时背景颜色发生变化
  2. 在中心包含一个小矩形
  3. 矩形可以通过编程改变颜色

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

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

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

【问题讨论】:

    标签: android android-button android-drawable


    【解决方案1】:

    有 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);
                    }
                }
            });
    

    【讨论】:

    • 但是每个按钮都包含一个可以是任何颜色的矩形(由用户确定),所以除非我误解,否则这对我不起作用,因为你本质上是在建议 onClick 和 onRelease 可绘制的并没有真正解决彩色矩形的问题。
    【解决方案2】:

    This talk from Google IO 2013 由 Nick Butcher 和 Roman Nurik 撰写的 Android UI 设计帮助解决了这个问题。

    XML 属性 style="?android:borderlessButtonStyle" 可以设置在 ImageButton(甚至只是 Button)上,以赋予其透明背景,触摸时以标准全息蓝色点亮.根据 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"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-14
      • 2021-04-23
      • 1970-01-01
      • 2016-07-24
      • 1970-01-01
      • 2015-06-14
      • 2016-04-17
      • 1970-01-01
      相关资源
      最近更新 更多