在scrollview中嵌套listview或者gridview時
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供興安盟網(wǎng)站建設(shè)、興安盟做網(wǎng)站、興安盟網(wǎng)站設(shè)計、興安盟網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、興安盟企業(yè)網(wǎng)站模板建站服務(wù),十多年興安盟做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
如果listview或者gridview的高度時wrap-content會導(dǎo)致兩者只顯示一行多一點
原因:
listview和gridview都繼承于scrollview 兩個scrollview嵌套會導(dǎo)致高度有問題。
核心解決方案:
重寫listview和gridview的onMeasure方法 如下:
package come.cake.customview; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.ListView; /** * Created by apple on 16/1/20. */ 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); } protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_MOVE) { return true;//禁止listview進行滑動 } return super.dispatchTouchEvent(ev); } }
package come.cake.customview; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.GridView; public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if (ev.getAction() == MotionEvent.ACTION_MOVE) { return true;//禁止Gridview進行滑動 } return super.dispatchTouchEvent(ev); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } } gridView.setFocusable(false); //scrollview內(nèi)部嵌套gridview防止從底部顯示,加上這行代碼就會從頭部顯示