【问题标题】:custom button: change style when pressed自定义按钮:按下时更改样式
【发布时间】:2010-09-10 04:17:21
【问题描述】:

我使用样式创建了带有阴影的按钮:

<style name="test">
  <item name="android:shadowColor">#FFFFFF</item>
  <item name="android:shadowRadius">1</item>
  <item name="android:shadowDx">1</item>
  <item name="android:shadowDy">1</item>
</style>

这会在正常状态下的按钮文本上应用白色阴影。我只是想知道是否有人知道当按钮处于按下状态时是否有办法去除这个阴影。换句话说,当按钮处于另一种(按下)状态时,有没有办法应用另一种样式?

提前致谢!

编辑

粗体.xml:

<resources>
    <style name="bold_text">
        <item name="android:textStyle">bold</item>
    </style>
</resources>

button.xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/test_pressed"
              style="@style/bold_text"
          android:state_pressed="true"/>
    <item android:drawable="@drawable/test_focused"
          android:state_focused="true"/>
    <item android:drawable="@drawable/test_normal"/>
</selector>

我的布局:

<Button
        ...
        android:background="@drawable/button"/>

【问题讨论】:

    标签: android button coding-style state


    【解决方案1】:

    【讨论】:

    • 这个方法不起作用... ColorStateList 只允许我改变不同状态下的文本颜色。我想更改不同状态的样式(例如,按下时增加文本大小或按下时移除阴影)。
    • 这不仅可以做颜色,还可以做 xml 中定义的整个可绘制对象,只需将样式应用于可绘制对象。
    • 嗯。我似乎无法让它工作。我创建了一个名为“bold”的新样式,并创建了另一个名为“button_test.xml”的 XML 文件,其中包含一个具有各种状态(按下、聚焦、正常)的选择器。我只是不确定如何在我的布局中引用“button_test.xml”。
    • 您将样式应用到它们的 xml 文件中的可绘制对象本身
    • 我不确定我是否完全理解你的意思...我之前尝试过创建一个包含 的 XML 文件,其中包含各种状态,每个状态都包含不同的可绘制对象和风格。我使用 android:background="NEW_XML_FILE_I_CREATED" 在布局中引用了我创建的 XML 文件。它似乎不起作用。
    【解决方案2】:

    在查看了我的一个 button.xml 文件后,我发现评估的顺序(在文档中注明..)使得我的测试选择了相同的可绘制对象。更正顺序使其工作。

    button2.xml 的情况除外。我通过删除除“drawable”和“state_*”规范之外的所有规范使其工作。我在那里有一个“textColor”——看起来像通过其他检查的 XML(就像上面的 style=".." 一样)默默地使选择器无效。扩展验证的好地方!

    Schwiz 说得对...对于文本,请使用在资源目录的“color”子目录中定义的单独选择器:请参阅ColorStateList

    【讨论】:

      猜你喜欢
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多