El elemento ListView no extenderá el ancho a fill_parent

Tengo un ViewGroup personalizado que infla un ListView de una disposición del xml . El diseño del elemento de lista se infla de otro archivo xml . Todas las vistas se establecen en fill_parent . El ListView llena su padre, pero los elementos ListView no.

He intentado poner el ListView en un LinearLayout y asignarle peso. Probado RelativeLayout también. También, he construido el ListView programmaticaly, sin usar el diseño de xml . Incluso cambió el LayoutParams antes de agregar la vista al ViewGroup .

También he tenido en cuenta estos puestos así: Anchura de área de clic en ListView w / onListItemClick , En Android, ¿cómo puedo establecer la altura y el ancho de un elemento ListView? , Ancho de lista de vista Android prob .

Cualquier idea de por qué los elementos no se extienden a ancho de relleno? ¿Y cómo extenderlas?

Clase MyViewGroup:

 public class MyViewGroup extends ViewGroup { public MyViewGroup(Context context, AttributeSet attrs) { super(context, attrs); generateMyViewGroup(); } private void generateMyViewGroup() { ListView main = (ListView) View.inflate(getContext(), R.layout.layout_main, null); main.setAdapter(new MyAdapter(getContext())); this.addView(main); } @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { this.getChildAt(0).layout(l, t, r, b); } } 

Diseño ListView xml :

 <?xml version="1.0" encoding="utf-8"?> <ListView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginRight="3dp" android:background="#77000000" android:cacheColorHint="#00000000" android:divider="#00000000" android:dividerHeight="0dp" android:drawSelectorOnTop="false" android:scrollbars="vertical" > </ListView> 

Disposición del elemento ListView :

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/layout_main_category" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@color/mainBackground" android:gravity="fill_horizontal|center_vertical" android:orientation="vertical" > <TextView android:id="@+id/main_category" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:layout_marginRight="8dp" android:paddingBottom="7dp" android:paddingLeft="20dp" android:paddingRight="5dp" android:paddingTop="20dp" android:text="test" android:textColor="@color/mainCategory" android:textSize="15sp" android:textStyle="bold" /> </LinearLayout> 

Parte de la clase MyAddapter :

 public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(null == convertView) { LayoutInflater inflater = LayoutInflater.from(context); convertView = inflater.inflate(R.layout.layout_main_category, null); viewHolder = new ViewHolder(); viewHolder.mainItemTitle = (TextView) convertView.findViewById(R.id.main_category); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.mainItemTitle.setText("text"); return convertView; } private static class ViewHolder { public TextView menuItemTitle; } 

Si anula el onLayout , debe anular el onMeasure también .. casi siempre ..

 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ int parentWidth = MeasureSpec.getSize(widthMeasureSpec); int parentHeight = MeasureSpec.getSize(heightMeasureSpec); this.setMeasuredDimension(parentWidth, parentHeight); // this.setLayoutParams(new // *ParentLayoutType*.LayoutParams(parentWidth,parentHeight)); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } 

Si todavía no funciona, utilice la línea comentada también.

Actualizar:

Otra opción para ti es olvidar onLayout y onMeasure , y anular onFinishInflate() y añadir estas líneas a ella. Si está inflando MyViewGroup de xml.

 protected void onFinishInflate () { super.onFinishInflate(); ListView main = (ListView) View.inflate(getContext(), R.layout.layout_main,null); main.setAdapter(new MyAdapter(getContext())); this.addView(main); } 

El ViewGroup no terminó funcionando correctamente. También he intentado usar LinearLayout . Pero RelativeLayout acabó inflando correctamente el diseño. Por lo tanto, mis diseños xml y el adaptador se mantuvo sin cambios, pero cambié la clase principal para extender RelativeLayout . También eliminó el onLayout() .

Clase MyView:

 public class MyView extends RelativeLayout { //Extra code unchanged .... private void generateMyView() { ListView menu = (ListView) View.inflate(getContext(), R.layout.layout_main, null); menu.setAdapter(new MyAdapter(getContext())); this.addView(menu); } //Removed onLayout() } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.