如何在Android中为颜色创建选择器(例如颜色状态列表,但用于自定义属性)?

莱·冈萨雷斯(LayGonzález)

这是我所拥有的并且无法按预期工作

// some_color.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:custom="http://schemas.android.com/apk/res/com.example">

    <item custom:greyShadow="true" android:color="@color/grey_shadow"/>
    <item custom:blueShadow="true" android:color="@color/blue_shadow"/> 

</selector>

“ greyShadow”和“ blueShadow”是我的自定义属性。

我如何使用它:

我想通过这样的样式在视图中使用它(颜色选择器some_color.xml):

布局:

// some_layout.xml
// the style text_input_style.xml sets a drawable as a background, that drawable uses color selector
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    custom:blueShadow="true" <!-- this is the custom attribute -->
    style="@style/text_input_style" <!-- this is the style -->
/>

风格:

// text_input_style.xml
<style name="text_input_style_blue">
    <item name="android:background">@drawable/some_drawable.xml</item>
</style>    

可绘制:

//some_drawable.xml (used by text_input_style.xml)
<item>
    <shape android:shape="rectangle" >
       <solid android:color="@color/some_color"/> <!-- here, the drawable uses the color selector --> 
    </shape>
</item>
卡拉库里

这里发生了许多问题。

首先:Android中的标准视图(包括EditText)都不会识别或使用您定义的自定义属性。在您的布局中,custom:blueShadow="true"EditText上的行是没有意义的。您将必须继承EditText的子类,自己读取属性,然后应用它们。

第二:您定义的属性用于可绘制的选择器,而不是视图,因此(至少对我而言)将它们应用于布局XML中的视图没有意义(至少对我而言)。通常,您可以通过子类化View并实现来使用此类属性onCreateDrawableState(),然后refreshDrawableState在视图内部状态的任何更改需要更新可绘制状态时调用

public class CustomEditText extends EditText {
    private boolean blueShadow;
    private boolean greyShadow;

    /* constructors omitted */

    public void setBlueShadow(boolean b) {
        if (blueShadow != b) {
            blueShadow = b;
            refreshDrawableState();
        }
    }

    public void setGreyShadow(boolean b) {
        if (greyShadow != b) {
            greyShadow = b;
            refreshDrawableState();
        }
    }

    @Override
    protected int[] onCreateDrawableState(int extraSpace) {
        int[] baseState = super.onCreateDrawableState(extraSpace + 2);
        if (blueShadow) {
            mergeDrawableStates(baseState, new int[]{ R.attr.blueShadow });
        }
        if (greyShadow) {
            mergeDrawableStates(baseState, new int[]{ R.attr.greyShadow });
        }
    }
}

这是有关自定义可绘制状态如何工作的很好指南:Charles Harley-Android中的自定义可绘制状态

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Xcode故事板颜色选择器中添加自定义颜色?

来自分类Dev

Android:使用选择器更新自定义颜色属性

来自分类Dev

如何在Android中为自定义列表视图的列表项赋予两种不同的颜色?

来自分类Dev

是否可以创建用于导航祖先的自定义jQuery选择器?例如:closest或:parents选择器

来自分类Dev

如何在Android中自定义日期/时间选择器?

来自分类Dev

WPF颜色选择器-添加新的自定义颜色

来自分类Dev

Android:自定义视图属性的选择器

来自分类Dev

如何使用jQuery扩展方法为元素或类选择器创建自定义插件

来自分类Dev

如何在Android上保存选择器颜色

来自分类Dev

如何在Android上保存选择器颜色

来自分类Dev

如何在LibreOffice Impress中为幻灯片定义自定义颜色背景?

来自分类Dev

如何在日期选择器上创建自定义cron作业?

来自分类Dev

在ComboBox-颜色选择器中显示颜色列表

来自分类Dev

如何在MATLAB中定义自定义颜色快捷方式(例如“ r”,“ g”,“ b”,“ k”等)

来自分类Dev

在PropertyGrid中使用自定义颜色选择器对话框

来自分类Dev

具有多个颜色选择器的KnockoutJS自定义绑定

来自分类Dev

自定义Flex颜色选择器以具有关闭按钮

来自分类Dev

如何自定义选择器中的默认 <option>

来自分类Dev

如何在Android中更改日期选择器的背景颜色

来自分类Dev

如何在VS 2013中为HTML尖括号设置自定义颜色?

来自分类Dev

如何在VS 2013中为HTML尖括号设置自定义颜色?

来自分类Dev

如何在 Flutter 中为自定义画家的颜色设置动画?

来自分类Dev

Java Swing如何在自定义的ColorChooserPanel中创建颜色色板?

来自分类常见问题

尽管缺少定义的自定义颜色属性,MaterialComponents随机为状态栏和工具栏提供颜色

来自分类Dev

如何在Swift中为状态设置属性标题颜色

来自分类Dev

如何在图表中设置自定义填充颜色

来自分类Dev

如何在C#中制作自定义颜色?

来自分类Dev

如何在C#中制作自定义颜色?

来自分类Dev

如何在python中自定义颜色条?

Related 相关文章

  1. 1

    如何在Xcode故事板颜色选择器中添加自定义颜色?

  2. 2

    Android:使用选择器更新自定义颜色属性

  3. 3

    如何在Android中为自定义列表视图的列表项赋予两种不同的颜色?

  4. 4

    是否可以创建用于导航祖先的自定义jQuery选择器?例如:closest或:parents选择器

  5. 5

    如何在Android中自定义日期/时间选择器?

  6. 6

    WPF颜色选择器-添加新的自定义颜色

  7. 7

    Android:自定义视图属性的选择器

  8. 8

    如何使用jQuery扩展方法为元素或类选择器创建自定义插件

  9. 9

    如何在Android上保存选择器颜色

  10. 10

    如何在Android上保存选择器颜色

  11. 11

    如何在LibreOffice Impress中为幻灯片定义自定义颜色背景?

  12. 12

    如何在日期选择器上创建自定义cron作业?

  13. 13

    在ComboBox-颜色选择器中显示颜色列表

  14. 14

    如何在MATLAB中定义自定义颜色快捷方式(例如“ r”,“ g”,“ b”,“ k”等)

  15. 15

    在PropertyGrid中使用自定义颜色选择器对话框

  16. 16

    具有多个颜色选择器的KnockoutJS自定义绑定

  17. 17

    自定义Flex颜色选择器以具有关闭按钮

  18. 18

    如何自定义选择器中的默认 <option>

  19. 19

    如何在Android中更改日期选择器的背景颜色

  20. 20

    如何在VS 2013中为HTML尖括号设置自定义颜色?

  21. 21

    如何在VS 2013中为HTML尖括号设置自定义颜色?

  22. 22

    如何在 Flutter 中为自定义画家的颜色设置动画?

  23. 23

    Java Swing如何在自定义的ColorChooserPanel中创建颜色色板?

  24. 24

    尽管缺少定义的自定义颜色属性,MaterialComponents随机为状态栏和工具栏提供颜色

  25. 25

    如何在Swift中为状态设置属性标题颜色

  26. 26

    如何在图表中设置自定义填充颜色

  27. 27

    如何在C#中制作自定义颜色?

  28. 28

    如何在C#中制作自定义颜色?

  29. 29

    如何在python中自定义颜色条?

热门标签

归档