首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LayerDrawable以编程方式

LayerDrawable以编程方式
EN

Stack Overflow用户
提问于 2013-11-21 20:13:21
回答 2查看 20.4K关注 0票数 10

由于我的应用程序的颜色主题是动态的,所以我只能使用colors和shapedrawables创建背景可绘制内容,我想构建一个可使用颜色和形状绘制的edittext背景,如下所示。但是我想通过编程来实现这一点

如何以编程的方式构建同样的可绘制?

代码语言:javascript
复制
<item>
    <shape>
        <solid android:color="@android:color/yellow" />
    </shape>
</item>

<!-- main color -->
<item
    android:bottom="1dp"
    android:left="1dp"
    android:right="1dp">
    <shape>
        <solid android:color="@android:color/white" />
    </shape>
</item>

<!-- draw another block to cut-off the left and right bars -->
<item android:bottom="10dp">
    <shape>
        <solid android:color="@android:color/white" />
    </shape>
</item>

这就是我试过的.

代码语言:javascript
复制
    GradientDrawable border = new GradientDrawable();
    border.setShape(GradientDrawable.RECTANGLE);
    border.setColor(Color.WHITE);

    GradientDrawable background = new GradientDrawable();
    background.setShape(GradientDrawable.RECTANGLE);
    background.setColor(Color.YELLOW);


    GradientDrawable clip = new GradientDrawable();
    clip.setShape(GradientDrawable.RECTANGLE);
    border.setColor(Color.WHITE);

    Drawable[] layers = {background, border, clip};
    LayerDrawable layerDrawable = new LayerDrawable(layers);

    layerDrawable.setLayerInset(0, 0, 0, 0, 0);
    layerDrawable.setLayerInset(1, 1, 0, 1, 1);
    layerDrawable.setLayerInset(2, 0, 0, 0, 10);

但结果是different....please help...!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-22 14:55:36

我终于把它修好了。我使用的是ShapeDrawable而不是GradientDrawable

通过将此LayerDrawable设置为EditText背景,您可以使用自定义颜色重新生成默认EditText样式。

代码语言:javascript
复制
ShapeDrawable border = new ShapeDrawable();
border.getPaint().setColor(Color.WHITE);

ShapeDrawable background = new ShapeDrawable();
background.getPaint().setColor(Color.BLACK);


ShapeDrawable clip = new ShapeDrawable();
clip.getPaint().setColor(Color.WHITE);

Drawable[] layers = {background, border, clip};
LayerDrawable layerDrawable = new LayerDrawable(layers);

layerDrawable.setLayerInset(0, 0, 0, 0, 0);
layerDrawable.setLayerInset(1, 1, 0, 1, 1);
layerDrawable.setLayerInset(2, 0, 0, 0, 10);
票数 30
EN

Stack Overflow用户

发布于 2017-07-08 09:32:53

这也适用于渐变绘图:

代码语言:javascript
复制
GradientDrawable border = new GradientDrawable();
border.setColor(Color.White);

GradientDrawable background = new GradientDrawable();
background.setColor(Color.Black);

GradientDrawable clip = new GradientDrawable();
clip.setColor(Color.White);

GradientDrawable[] layers = {background, border, clip};
LayerDrawable layerDrawable = new LayerDrawable(layers);

layerDrawable.setLayerInset(0, 0, 0, 0, 0);
layerDrawable.setLayerInset(1, 1, 0, 1, 1);
layerDrawable.setLayerInset(2, 0, 0, 0, 10);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20120725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档