zl程序教程

您现在的位置是:首页 >  移动开发

当前栏目

Android之ScrollView嵌套ListView和GridView冲突的解决方法

Android方法 解决 嵌套 冲突 listview GridView ScrollView
2023-06-13 09:15:04 时间
那么里面的ScrollView高度计算就会出现问题。我们也就无法得到想要的效果。
核心解决方案:重写ListView或者GridView的OnMesure方法。
复制代码代码如下:

publicclassMyListViewextendsListView{
       publicMyListView(Contextcontext){
               super(context);
       }
       publicMyListView(Contextcontext,AttributeSetattrs){
               super(context,attrs);
       }
       publicMyListView(Contextcontext,AttributeSetattrs,intdefStyle){
               super(context,attrs,defStyle);
       }
       @Override
       protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){
               intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,
                               MeasureSpec.AT_MOST);
               super.onMeasure(widthMeasureSpec,expandSpec);
       }
}

GridView
复制代码代码如下:

publicclassMyGridViewextendsGridView{  
   privatebooleanhaveScrollbar=true;  
   publicMyGridView(Contextcontext){  
       super(context);  
   }  
   publicMyGridView(Contextcontext,AttributeSetattrs){  
       super(context,attrs);  
   }  
   publicMyGridView(Contextcontext,AttributeSetattrs,intdefStyle){  
       super(context,attrs,defStyle);  
   }  
   /** 
    *设置是否有ScrollBar,当要在ScollView中显示时,应当设置为false。默认为true 
    *  
    *@paramhaveScrollbars 
    */  
   publicvoidsetHaveScrollbar(booleanhaveScrollbar){  
       this.haveScrollbar=haveScrollbar;  
   }  
   @Override  
   protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){  
       if(haveScrollbars==false){  
           intexpandSpec=MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);  
           super.onMeasure(widthMeasureSpec,expandSpec);  
       }else{  
           super.onMeasure(widthMeasureSpec,heightMeasureSpec);  
       }  
   }  
}