Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我放置背景时,android复选框加倍_Java_Android_Checkbox_Drawable - Fatal编程技术网

Java 当我放置背景时,android复选框加倍

Java 当我放置背景时,android复选框加倍,java,android,checkbox,drawable,Java,Android,Checkbox,Drawable,我试图将自定义背景设置为复选框,但它翻了一倍,我不知道为什么 我的主要活动: protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); CheckBox cb = new CheckBox(getApplicationContext()); DrawableCheckButto

我试图将自定义背景设置为复选框,但它翻了一倍,我不知道为什么

我的主要活动:

protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    CheckBox cb = new CheckBox(getApplicationContext());
    DrawableCheckButton d = new DrawableCheckButton(getApplicationContext());
    cb.setBackgroundDrawable(d);
    setContentView(cb);
}
DrawableCheckButton类:

public class DrawableCheckButton extends StateListDrawable {

public DrawableCheckButton(Context context) {
    int[] state_checked = { android.R.attr.state_checked };
    int[] state_active = { android.R.attr.state_enabled };
    CustomDrawableCheckButton d = new CustomDrawableCheckButton(context);
    CustomDrawableCheckButton2 d2 = new CustomDrawableCheckButton2(context);
    addState(state_checked, d);
    addState(state_active, d2);
}

}
另一个类看起来像这样

public class CustomDrawableCheckButton extends Drawable{
private Context context;
public CustomDrawableCheckButton(Context context) {
    // TODO Auto-generated constructor stub
    this.context = context;
}
@Override
public void draw(Canvas canvas) {
    Path path1 = new Path();
    Paint paint1 = new Paint();
    path1.moveTo(0, 3);
    path1.lineTo(17, 3);
    path1.moveTo(0, 3);
    path1.lineTo(0, 23);
    path1.lineTo(20, 23);
    path1.lineTo(20, 14);
    paint1.setColor(context.getResources().getColor(R.color.orange));
    paint1.setStrokeWidth(1);
    paint1.setStyle(Paint.Style.STROKE);
    //
    Path path2 = new Path();
    Paint paint2 = new Paint();
    path2.moveTo(4,10);
    path2.lineTo(10, 16);
    path2.lineTo(22, 4);
    paint2.setColor(context.getResources().getColor(R.color.purple));
    paint2.setStrokeWidth(5);
    paint2.setStyle(Paint.Style.STROKE);
    canvas.drawPath(path1, paint1);
    canvas.drawPath(path2, paint2);

}

我需要一些帮助。

这是我的建议:
main活动
中,应避免使用
ApplicationContext
,有关详细信息,请参阅此,并使用
setButtonDrawable
而不是
setBuckGroundDrawable

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    CheckBox cb = new CheckBox(this);
    DrawableCheckButton d = new DrawableCheckButton(this);
    cb.setButtonDrawable(d);
    setContentView(cb);
}
DrawableCheckButton
中:

public DrawableCheckButton(Context context) {
    CustomDrawableCheckButton d = new CustomDrawableCheckButton(context);
    addState(new int[]{android.R.attr.state_checked }, d);
    CustomDrawableCheckButton2 d2 = new CustomDrawableCheckButton2(context);
    addState(new int[]{}, d2);
}

希望这能有所帮助。请让我知道它是否有效。

答案是我没有做cb.setBackgroundDrawable(),而是做了cb.setButtonDrawable()。背景代表全部,按钮代表标记

你说加倍是什么意思?你有截图吗?因为复选框在复选标记中,而不是背景中,我想说对不起,我找到了答案,它更简单。我没有做cb.setBackgroundDrawable(),而是做了cb.setButtonDrawable()。背景是全部,按钮是标记。对不起,前面的答案,我已经为遇到相同问题的任何人更新了它。