wrap_content用于listview的宽度

有没有办法让ListView与等于最长的行? 为ListView的宽度设置wrap_content无效。 ListView水平覆盖整个屏幕。

这是活动布局

  

这是行xml

      

谢谢Gratzi

有没有办法让ListView与等于最长的行?

不,部分是因为我们无法知道最长的行是什么。

假设您将ListAdapter附加到ListView ,其中ListAdapter上的getCount()返回值1,234,567 。 要确定最长行的宽度,我们必须创建每一行并检查其宽度。 这将需要数小时,用户在这些时间内不会感到高兴。

有时,你知道总会有数量有限的项目,可能是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 maxWidth) { maxWidth = width; } } return maxWidth; } 

像这样使用它(注意我在宽度上添加了一些额外的空间以防万一):

 listView.getLayoutParams().width = getWidestView(mContext, adapter)*1.05;