因爲ListView,GridView自己都繼承於ScrollView,一旦在ScrollView中嵌套ScrollView,web
在ScrollView中嵌套使用ListView或者GridView,ListView只會顯示一行多一點。二者進行嵌套,即會發生衝突。
那麼裏面的ScrollView高度計算就會出現問題。
咱們也就沒法獲得想要的效果。
核心解決方案: 重寫ListView或者GridView的OnMesure 方法。ide
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