我创建了自定义按钮,它扩展了复合按钮,但是textview位于按钮的drawable后面。我希望Button的文本应该出现并且drawable应该在后面而不在布局中创建其他视图。
有可能实现这个目标吗?
任何链接或示例代码都有很大帮助。
答案 0 :(得分:0)
CompoundButton
是一个抽象类,主要用于从Checkbox
或Switch
等SDK创建其他视图,它有自己的局限性和特定行为。
有更多方法可以更轻松地实现它,并且没有CompoundButton
依赖。
1。创建自己的ViewGroup
并将子项用作图层。有方法可以更改z-order
:view.bringToFront
和group.bringChildToFront
。这个类每秒旋转三层。
static class LayeredButton extends RelativeLayout {
public LayeredButton(Context context) {
super(context);
Button buttonA = new Button(context);
Button buttonB = new Button(context);
Button buttonC = new Button(context);
buttonA.setText("a");
buttonB.setText("b");
buttonC.setText("c");
addView(buttonC);
addView(buttonB);
addView(buttonA);
rotateChildren();
}
void rotateChildren(){
postDelayed(new Runnable() {
@Override
public void run() {
getChildAt(0).bringToFront();
rotateChildren();
}
}, 1000);
}
}
2。另一个选项是切换视图的可见性:view.setVisibility(View.VISIBLE)
也在ViewGroup
3。最后一个是使用Canvas
“手动”绘制它。这可能是最灵活的方式。还具有更好的性能,并为您提供添加自定义动画的机会。
public void onDraw(Canvas canvas){
canvas.drawRect(rect);//bottom layer
canvas.drawText(text);//mid layer
canvas.drawLine(line);//top layer
}