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: