我正在研究android.我希望我的列表视图水平包装其内容而不是填充所有宽度.wrap_content属性不起作用.该怎么办?
Jay*_*ala 46
为了实现wrap_content高度ListView,我们需要使用CustomListView的是extends我们的母语ListView.
MyListView.java
public class MyListView extends ListView {
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
Run Code Online (Sandbox Code Playgroud)
在您layout使用这样的自定义视图中,
layout.xml
<com.yourpackagename.MyListView
...
android:layout_width="match_parent"
android:layout_height="wrap_content"
... />
Run Code Online (Sandbox Code Playgroud)
K_A*_*nas 38
正如Romain Guy(Google工程师在UI工具包上工作)所说的那样
通过设置宽度,wrap_content您可以告诉ListView与其最宽的子项一样宽.因此,ListView必须测量其项目并获取必须在适配器上调用getView()的项目.这可能会发生几次,具体取决于布局传递的数量,父布局的行为等.
因此,如果将ListView的布局宽度或布局高度设置为ListView,wrap_content则会尝试测量附加到它的每个视图 - 这绝对不是您想要的.
请记住:避免一直设置wrap_contentListViews或GridViews,有关详细信息,请参阅此Google I/O视频,了解listview的世界