LayerDrawable программно

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

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

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

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

Solutions Collecting From Web of "LayerDrawable программно"

Я получил его работу окончательно … Вместо того, чтобы использовать GradientDrawable, я использовал ShapeDrawable … thats all …. 🙂

Установив этот 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); 

`

Это также работает с Gradient Drawables:

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