2013-11-21 2 views
6

Поскольку цветная тема моего приложения динамична, я могу создавать только образы фона, используя цвета и форму, которые можно использовать, Я хочу создать фоновый рисунок edittext с цветами и фигурами, как показано ниже. Но я хочу сделать это программноLayerDrawable программно

Как это сделать программно?

<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> 

это то, что я пытался ....

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); 

но результат отличается .... пожалуйста, помогите ....!

+0

Если ваша тема приложения динамична, почему вы не используете стили? http://developer.android.com/guide/topics/ui/themes.html –

+0

Я не могу хранить значения, такие как цвета в xml, также ... в моем случае значения цвета поступают с сервера в любом случае благодаря вашему времени ...:) – zaaak

+0

Вы когда-нибудь задумывались об использовании некоторых изображений и применении цветового фильтра на этих изображениях для реализации тем. – Alan

ответ

20

я получил это работает, наконец ... Вместо того, чтобы использовать GradientDrawable я использовал ShapeDrawable ... вот и все .... :)

Установив этот layerDrawable как EditText фон можно регенерировать по умолчанию EditText стилей с пользовательские цвета ...

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); 

`

+6

Больше объяснений было бы лучше. – jcaruso

+0

Точно помощь, в которой я нуждалась, спасибо – JamisonMan111

0

Это также работает с градиентом вводимого коэффициента:

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); 
Смежные вопросы