Vista personalizada (extendiendo LinearLayout) la propiedad "perder peso"

Así que .. Estoy definiendo una vista personalizada / diseño que se ve como sigue:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:weightSum="3"> <Button android:id="@+id/option_a" style="?android:selectableItemBackground" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="One" android:background="?android:selectableItemBackground" android:textAppearance="?android:attr/textAppearanceButton" android:textColor="@android:color/secondary_text_dark" /> <Button android:id="@+id/option_b" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Two" android:background="?android:selectableItemBackground" android:textColor="@android:color/holo_red_dark" android:textAppearance="?android:attr/textAppearanceButton" /> <Button android:id="@+id/option_c" style="?android:selectableItemBackground" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Three" android:background="?android:selectableItemBackground" android:textAppearance="?android:attr/textAppearanceButton" android:textColor="@android:color/secondary_text_dark" /> </LinearLayout> 

Resultado:

introduzca la descripción de la imagen aquí

Pero entonces agrego mi opinión de encargo en otra disposición como sigue:

 <com.xxx.xxx.xxx.ThreeStatePreference android:id="@+id/mode" android:layout_width="match_parent" android:layout_height="wrap_content"/> 

Resultado:

introduzca la descripción de la imagen aquí

Parece que es completamente ignorar el "peso" de la propiedad. ¿Qué estoy haciendo mal?


PD: He encontrado una solución de código:

 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ super.onMeasure(widthMeasureSpec, heightMeasureSpec); int wspec = MeasureSpec.makeMeasureSpec(getMeasuredWidth()/getChildCount(), MeasureSpec.EXACTLY); int hspec = MeasureSpec.makeMeasureSpec(getMeasuredHeight(), MeasureSpec.EXACTLY); for(int i=0; i<getChildCount(); i++){ View v = getChildAt(i); v.measure(wspec, hspec); } } 

Pero me gustaría saber si esto es posible hacer usando el XML.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.