Мне нужен мой собственный RadioButton со сложным индивидуальным дизайном (который не
возможно только при использовании девяти патчей).
Итак, я подумал о расширении RadioButton и использовании всех функций из
RadioGroup.
Для сложного индивидуального дизайна я раздуваю LinearLayout (сначала я
использовал RelativeLayout, но, похоже, выдает исключение NullPointerException, поэтому я
попробовал LinearLayout, который работает вместо).
Ну, у меня есть некоторые проблемы с измерением, компоновкой и отрисовкой
LinearLayout.
Давайте предположим, что есть этот сложный нестандартный дизайн:
<?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>
А это "новый" вид:
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);
}
}
На самом деле я не знаю, как рассчитать измеренный размер. Быть
Честно говоря, я хочу, чтобы RadioGroup рассчитала достаточно места для меня и меня
хочу делегировать это пространство завышенной LinearLayout.
Спасибо, что помогли мне с этим.
С наилучшими пожеланиями,
Marco