J'ai ce code:
public class CopyOfLinearLayoutEntry extends LinearLayout implements Checkable {
private CheckedTextView _checkbox;
private Context c;
public CopyOfLinearLayoutEntry(Context context) {
super(context);
this.c = context;
setWillNotDraw(false);
}
public CopyOfLinearLayoutEntry(Context context, AttributeSet attrs) {
super(context, attrs);
this.c = context;
setWillNotDraw(false);
}
@Override
protected void onDraw(Canvas canvas) {
Paint strokePaint = new Paint();
strokePaint.setARGB(200, 255, 230, 230);
strokePaint.setStyle(Paint.Style.STROKE);
strokePaint.setStrokeWidth(12);
Rect r = canvas.getClipBounds();
Rect outline = new Rect(1, 1, r.right - 1, r.bottom - 1);
canvas.drawLine(r.left, r.top, r.right, r.top, strokePaint);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
// find checked text view
int childCount = getChildCount();
for (int i = 0; i < childCount; ++i) {
View v = getChildAt(i);
if (v instanceof CheckedTextView) {
_checkbox = (CheckedTextView) v;
}
}
}
@Override
public boolean isChecked() {
return _checkbox != null ? _checkbox.isChecked() : false;
}
@Override
public void setChecked(boolean checked) {
if (_checkbox != null) {
_checkbox.setChecked(checked);
}
}
@Override
public void toggle() {
if (_checkbox != null) {
_checkbox.toggle();
}
}
}
3 Réponses :
de ce que j'ai appris et utilise, il y a deux manières: p>
Vous pouvez faire ce que vous essayez d'éviter (dupliquer le fichier de classe et de remplacer "étend linéarlayout" avec "étend le relativation") p> li>
Vous pouvez créer 2 interfaces et 1 classe: une interface qui s'étend sur la linearlayout, une autre pour étendre la relativation et la classe mettant en œuvre les procédés et les variables des interfaces étendues. P> LI> ol>
J'espère que cela aide un peu p>
Vous devez repenser votre approche. p>
semble que vous utilisiez la mise en page pour contrôler la logique de vue. Malheureusement, votre question n'a pas trop d'informations sur ce que vous essayez d'atteindre. p>
Vous avez peu de possibilités: p>
Vous n'avez pas besoin de prolonger les deux pour éviter le code dupliqué. Vous pouvez faire quelque chose comme ceci: