【问题标题】:Shadow color on buttons depending on state in XML - Android按钮上的阴影颜色取决于 XML 中的状态 - Android
【发布时间】:2011-06-28 22:02:38
【问题描述】:

我在 Android 中创建了自定义 ToggleButtons,由于所有按钮都继承自同一个 xml,我想根据状态更改它们的行为方式,所以当检查状态时,我想更改阴影颜色,但这似乎没有可以使用当前的 SDK。

我创建了一个包含 button_colors 的 xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<selector
   xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_checked="true"
    android:color="#FFFFFF"  />

<item
    android:color="#000000" />
 </selector>

但这似乎只适用于文本颜色而不是文本上的阴影颜色。 有什么我想念的吗? 而不是手动在代码中为每个按钮执行此操作,因为我希望将其应用于应用程序中的每个按钮。

更新编辑:

我的选择器目前看起来像这样

<selector
xmlns:android="http://schemas.android.com/apk/res/android">

<item
    android:state_checked="true"
    android:drawable="@drawable/button_gradient_selected" />

<item
    android:drawable="@drawable/button_gradient" />

</selector>

但正如我向下面的评论员提到的那样,我似乎无法从这里更改样式/文本颜色阴影,因为它似乎只能接受可绘制对象。

当我尝试在此处的按钮上设置不同的样式时,它会强制关闭或不根据状态更改样式。当我只尝试在此处输入样式并将可绘制对象设置为强制关闭的样式时。无论哪种方式,它似乎都不起作用。

【问题讨论】:

标签: android xml button


【解决方案1】:

好像Android框架不支持这个。

来自 TextView.java:

        case com.android.internal.R.styleable.TextView_textColor:
            textColor = a.getColorStateList(attr);
            break;

        case com.android.internal.R.styleable.TextView_shadowColor:
            shadowcolor = a.getInt(attr, 0);
            break;

他们对待 textColor 和 shadowColor 的方式不同。

【讨论】:

【解决方案2】:

请参阅我关于另一个 StackOverFlow 问题的解决方案。我扩展了TextView 以提供一个可行的解决方案here。 (将TextView替换为Button)

【讨论】:

    【解决方案3】:

    这是你必须实现的选择器文件:

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:state_checked="false" android:drawable="@drawable/btn_toggle_off" /> 
      <item android:state_checked="true" android:drawable="@drawable/btn_toggle_on" /> 
      </selector>
    

    这些是用于默认切换按钮的图片: btn_toggle_onbtn_toogle_off

    【讨论】:

    • 感谢您的回答,但这不是答案,因为可绘制对象不能仅更改背景可绘制对象的阴影颜色。根据developer.android.com/guide/topics/resources/…,您应该使用单独的颜色选择器,但这似乎不适用于阴影。我已经有一个选择可绘制的 XML,但不知道如何从那里更改阴影颜色或样式。
    • @Joakim Engstrom:我认为我没有正确理解您。你能发布你的活动截图吗?那我就受不了了。
    【解决方案4】:

    你可以有一个阴影颜色的选择器,像这样:color_selector.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android"
        android:dither="true">
        <item 
            android:state_pressed="true"
            android:color="@color/btn_text_on" />
        <item 
            android:state_focused="true"
            android:color="@color/btn_text_on" />
        <item
            android:color="@color/btn_text_off" />        
    </selector>
    

    然后在 style.xml 中为按钮设置样式时使用此选择器,如下所示:

    <style name="ButtonStyle">
    <item name="android:textColor">#FF383C48</item>
        <item name="android:textSize">12sp</item>
        <item name="android:shadowColor">@drawable/color_selector</item>
        <item name="android:shadowDx">0</item>
        <item name="android:shadowDy">1</item>
        <item name="android:shadowRadius">1</item>
        <item name="android:typeface">sans</item>
        <item name="android:textStyle">bold</item>
    </style>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2015-03-08
      • 2011-12-19
      相关资源
      最近更新 更多