Как наложить две кнопки с графикой / цветом, которые установлены программно

Я должен слой двух кнопок. Первая (верхняя) кнопка создается таким образом с использованием.png для значка.

// create circular button and colorize
View button1 = v.findViewById(bId);
GradientDrawable backgroundGradient = (GradientDrawable)imgIcon.getBackground();
backgroundGradient.setColor(getResources().getColor(R.color.holo_gray_light));

// set icon
button1.setImageDrawable(getResources().getDrawable(R.drawable.ic_phone_ib));

Для 2-й кнопки (внизу):

Button button2 = (Button) v.findViewById(R.id.textButton);
button2.setBackgroundResource(R.drawable.gray_rect);

что я пробовал:

1 установите левую нижнюю кнопку для рисования верхней кнопки. Результат: отображается только значок, а не фоновый цветной круг.

2 создайте RoundRectangle с помощью ShapeDrawable, затем создайте 2 слоя и используйте LayerDrawable, чтобы установить фон кнопки:

 int r= 20;
 float[] outerR=new float[]{r,r,r,r,r,r,r,r};
 RoundRectShape rr=new RoundRectShape(outerR,null,null);
 ShapeDrawable drawable=new ShapeDrawable(rr);
 drawable.getPaint().setColor(getResources().getColor(R.color.gray_189));


 // get bitmap from button1
 BitmapDrawable bm1 = (BitmapDrawable)button1.getDrawable();

 // layer them
 Drawable drawableArray[]= new Drawable[]{drawable, bm1};  
 LayerDrawable layerDraw = new LayerDrawable(drawableArray);  
 layerDraw.setLayerInset(1, 15, 15, 0, 0);//set offset of 2 layer  

 textButton.setBackground(layerDraw);

результат: такой же, как для (1).

Вот желаемый результат:

2 многослойных кнопки

button1 - синий со значком, button2 - серый прямоугольник со скругленными углами с текстом.

1 ответ

Решение

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

многослойные кнопки

Другие вопросы по тегам