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

Posted

技术标签:

【中文标题】如何使用以编程方式设置的图形/颜色对两个按钮进行分层【英文标题】:how to layer two buttons with graphics/color that are set programmatically 【发布时间】:2015-02-02 20:50:54 【问题描述】:

我必须分层两个按钮。第一个(顶部)按钮是这样创建的,使用 .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 将底部按钮左侧的可绘制对象设置为顶部按钮的可绘制对象。结果:只显示图标而不是背景色圆圈。

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) 相同。

这是想要的结果:

button1 是带有图标的蓝色按钮,button2 是带有文本的灰色圆角矩形。

【问题讨论】:

【参考方案1】:

在列表项的 xml 中使用 RelativeLayout 解决了这个问题。我使用了 2 个表格行,每个按钮一个,并调整它们的方向,以便按钮相应地分层,并且我能够以编程方式设置图标和背景颜色。

【讨论】:

以上是关于如何使用以编程方式设置的图形/颜色对两个按钮进行分层的主要内容,如果未能解决你的问题,请参考以下文章

使用以编程方式创建的 segue IOS 调用自定义过渡动画师

java图形界面 运行时如何在点击鼠标时 改变字体颜色或者大小

如何使对命令提示符窗口颜色的更改永久有效而不是只对本次有效?

使用以编程方式创建的 Windows 媒体播放器进行基本播放

如何创建对对象的引用以在 iOS 中对其进行动画处理

如何使两个按钮的颜色不同