ScrollView 下嵌套 ListView 或 GridView 冲突显示不全问题

ScrollView 下嵌套 ListView 或 GridView 会发列表现数据只能显示一行。因为他们都是滚动结构,两个滚动条放到一起就会引起冲突。

解决此问题可以通过计算 ListView 高度或重写 ListView 的 onMeasure 方法来解决。下面介绍通过重写 onMeasure 方法来解决问题。

重写 onMeasure 方法如下:

  1. public class ScrollListView extends ListView {
  2. public ScrollListView(Context context, AttributeSet attrs) {
  3. super(context, attrs);
  4. }
  5. @Override
  6. public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  7. int mExpandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
  8. MeasureSpec.AT_MOST);
  9. super.onMeasure(widthMeasureSpec, mExpandSpec);
  10. }
  11. }
  1. public class ScrollGridView extends GridView {
  2. public ScrollGridView(Context context, ttributeSet attrs) {
  3. super(context, attrs);
  4. }
  5. @Override
  6. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  7. int expandSpec = MeasureSpec.makeMeasureSpec(
  8. Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
  9. super.onMeasure(widthMeasureSpec, expandSpec);
  10. }
  11. }

ScrollView 需要注意的地方:

  • ScrollView 只支持垂直滚动。

  • ScrollView 只能添加一个子控件 。如果有多个子控件怎么办呢,直接在这些子控件外面再套一层 LinearLayout 就 OK 了。

(完)