Android之ScrollView嵌套ListView和GridView衝突

因爲ListView,GridView自己都繼承於ScrollView,一旦在ScrollView中嵌套ScrollView,web

在ScrollView中嵌套使用ListView或者GridView,ListView只會顯示一行多一點。二者進行嵌套,即會發生衝突。
那麼裏面的ScrollView高度計算就會出現問題。
咱們也就沒法獲得想要的效果。
核心解決方案: 重寫ListView或者GridView的OnMesure 方法。ide

 

  • public class MyListView extends ListView {
  •         public MyListView(Context context) {
  •                 super(context);
  •         }
  •         public MyListView(Context context, AttributeSet attrs) {
  •                 super(context, attrs);
  •         }
  •         public MyListView(Context context, AttributeSet attrs, int defStyle) {
  •                 super(context, attrs, defStyle);
  •         }
  •         @Override
  •         protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  •                 int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
  •                                 MeasureSpec.AT_MOST);
  •                 super.onMeasure(widthMeasureSpec, expandSpec);
  •         }
  • }

GridViewthis

public class MyGridView extends GridView {   
   
    private boolean haveScrollbar = true;   
   
    public MyGridView(Context context) {   
        super(context);   
    }   
   
    public MyGridView(Context context, AttributeSet attrs) {   
        super(context, attrs);   
    }   
   
    public MyGridView(Context context, AttributeSet attrs, int defStyle) {   
        super(context, attrs, defStyle);   
    }   
   
    /**  
     * 設置是否有ScrollBar,當要在ScollView中顯示時,應當設置爲false。 默認爲 true  
     *   
     * @param haveScrollbars  
     */   
    public void setHaveScrollbar(boolean haveScrollbar) {   
        this.haveScrollbar = haveScrollbar;   
    }   
   
    @Override   
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {   
        if (haveScrollbars == false) {   
            int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);   
            super.onMeasure(widthMeasureSpec, expandSpec);   
        } else {   
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);   
        }   
    }   
}
spa

相關文章
相關標籤/搜索