Иногда вы знаете, что всегда будет ограниченное количество элементов, возможно, 5, может быть, 40. В те времена вы все еще хотите использовать ListView и все еще хотите обернуть содержимое.
Для этих временесть такой метод:
/**
* Computes the widest view in an adapter, best used when you need to wrap_content on a ListView, please be careful
* and don't use it on an adapter that is extremely numerous in items or it will take a long time.
*
* @param context Some context
* @param adapter The adapter to process
* @return The pixel width of the widest View
*/
public static int getWidestView(Context context, Adapter adapter) {
int maxWidth = 0;
View view = null;
FrameLayout fakeParent = new FrameLayout(context);
for (int i=0, count=adapter.getCount(); i<count; i++) {
view = adapter.getView(i, view, fakeParent);
view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED);
int width = view.getMeasuredWidth();
if (width > maxWidth) {
maxWidth = width;
}
}
return maxWidth;
}
Используйте его следующим образом (обратите внимание, что на всякий случай я добавил дополнительное пространство к ширине):
listView.getLayoutParams().width = getWidestView(mContext, adapter)*1.05;