【问题标题】:Changing button styles programmatically以编程方式更改按钮样式
【发布时间】:2014-08-13 11:07:05
【问题描述】:

在我的应用中,用户查看他们制作的文档。它包括各种元素,包括 ButtonsToggleButtons。 用户可以设置自定义主题来更改 TextViews/EditTexts 中使用的 Typeface 和文本颜色以及布局的背景颜色。 所有这些元素都是在运行时生成的。

我想要的是让 Buttons/ToggleButtons 尊重用户选择的样式。我可以在运行时确定我想要的按钮的基本背景颜色,但是如果我使用 View.setBackGroundColor() 它会变成一个平面彩色矩形,而我想保留边框/阴影效果,加上按下时颜色变化。即我希望它看起来和行为像一个按钮,只是用不同的颜色着色。

是否有可能得到我想要的,因为在应用程序运行之前,所需的实际颜色仍然未知?

【问题讨论】:

    标签: android button togglebutton


    【解决方案1】:

    圆角、阴影效果等通常在 Android 中通过使用图像来完成。请参阅此developer documentation,了解其工作原理。

    小部件可以具有图像背景或纯色背景。因此,通过设置背景颜色,您将覆盖背景图像。如果您想更改颜色而不丢失其他所有内容,则需要编辑图像文件。

    【讨论】:

      【解决方案2】:

      通常您不能以编程方式更改样式;您可以使用主题或样式在 XML 布局中设置屏幕、布局的一部分或单个按钮的外观。但是,可以通过编程方式应用主题。

      还有诸如 StateListDrawable 之类的东西,它可以让您为 Button 可能处于的每个状态定义不同的可绘制对象,无论是聚焦、选择、按下、禁用等等。

      例如,要让您的按钮在按下时改变颜色,您可以定义一个名为 res/drawable/my_button.xml 的 XML 文件,如下所示:

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

      然后您可以通过设置属性将此选择器应用于 Button

      btn.setBackground(drawable);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-05-28
        • 1970-01-01
        • 2010-12-21
        • 1970-01-01
        • 1970-01-01
        • 2014-09-20
        相关资源
        最近更新 更多