Элемент ListView не будет расширять ширину до fill_parent

У меня есть пользовательская ViewGroup которая раздувает ListView из макета xml . Макет элемента списка накачивается из другого xml файла. Все представления заданы как fill_parent . ListView заполняет родительский элемент, но элементы ListView этого не делают.

Я попытался поставить ListView в LinearLayout и присвоить ему вес. Пробовал RelativeLayout . Кроме того, я создал программный ListView , не используя макет xml . Даже изменили LayoutParams перед добавлением представления в ViewGroup .

Я также принял во внимание эти сообщения: ширина области с кликами в ListView w / onListItemClick , на Android, как я могу установить высоту и ширину элемента ListView? , Android Listview width prob .

Любые идеи, почему элементы не распространяются на ширину заливки? И как их продлить?

Класс 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); } } 

Макет 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> 

Элемент 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> 

Часть класса 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; } 

Если вы переопределите onLayout , вы также должны переопределить onMeasure .. почти всегда ..

 @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); } 

Если он все еще не работает, используйте также прокомментированную строку.

Обновить:

Другой вариант для вас – забыть onLayout и onMeasure и переопределить onFinishInflate() и добавить к нему эти строки. Если вы раздуваете MyViewGroup из 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); } 

ViewGroup не работает должным образом. Я также пытался использовать LinearLayout . Но RelativeLayout закончил правильно раздувать макет. Итак, мои xml макеты и адаптер остались неизменными, но я изменил основной класс, чтобы расширить RelativeLayout . Также удаляется onLayout() .

Класс 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() }