如何使用以编程方式设置的图形/颜色对两个按钮进行分层

时间:2014-12-04 20:10:04

标签: android button layerdrawable

我必须分层两个按钮。第一个(顶部)按钮是使用图标的.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));

对于第二个按钮(底部):

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

我的尝试:

1将底部按钮上的drawable左侧设置为顶部按钮的drawable。结果:仅显示图标而不显示背景色圆圈。

2使用ShapeDrawable创建一个RoundRectangle然后创建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 layered buttons

button1为蓝色,带图标,button2为灰色圆角矩形,带文字。

1 个答案:

答案 0 :(得分:1)

在列表项的xml中使用RelativeLayout计算出来。我使用了2个表格行,每个按钮对应一个,并将它们定位为按钮层,因此我能够以编程方式设置图标和背景颜色。

layered buttons