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
.
- SetWidth () Botón de Android
- Cómo establecer el ancho de divisor ListView?
- Cómo hacer android buscar barra de ancho completo en api 17 o superior?
- Diseño de tabla XML? ¿Dos filas de la misma anchura con botones de igual anchura?
- Android DataBinding layout_width: Debe proporcionar un atributo layout_width
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; }
- Diseño de android redimensionamiento de los padres sin cambiar el tamaño de los childs
- ¿Cómo establecer el ancho mínimo fijo de EditText para que se ajuste firmemente alrededor de la pista y el contenido limitado por duración limitada?
- Anchos diferentes de diseños de Android en ViewPager
- Android layout_width & layout_height, cómo funciona?
- LinearLayout ImageView Redimensionar todos los anchos de imagen para ajustar
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() }