I need my own RadioButton with a complex custom design (which is not possible using nine-patch only).
So I tought about extending RadioButton and using all features from RadioGroup.
For the complex custom design I inflate a LinearLayout (at first I used RelativeLayout but it seems to throw a NullPointerException, so I tried LinearLayout which works instead).
Well, I've got some issues measuring, layouting and drawing the LinearLayout.
Let's assume there is this complex custom design:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="100dip" android:layout_height="wrap_content" android:orientation="vertical" android:layout_weight="1"... >
<TextView android:id="@+id/tab_count" android:layout_width="wrap_content" android:layout_height="wrap_content"... />
<TextView android:id="@+id/tab_text" android:layout_width="wrap_content" android:layout_height="wrap_content"... />
</LinearLayout>
And this is "new" view:
public class RadioView extends RadioButton {
private LinearLayout container;
private TextView count, text;
public RadioView(Context context) {
super(context);
init(context);
}
public RadioView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public RadioView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init(context);
}
private void init(final Context context) {
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
container = (LinearLayout) inflater.inflate(R.layout.ve_radio, null);
count = (TextView) container.findViewById(R.id.tab_count);
text = (TextView) container.findViewById(R.id.tab_text);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
container.measure(widthMeasureSpec, heightMeasureSpec);
// here comes the problem
setMeasuredDimension(200, 200);
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
container.layout(left, top, right, bottom);
}
@Override
protected void onDraw(Canvas canvas) {
container.draw(canvas);
}
}
Actually I don't know how to calculate the measured dimension. To be honest I want the RadioGroup to calculate enough space for me and I want to delegate this space to the inflated LinearLayout.
Thank you for helping me out on this.
Best Regards, Marco