重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
在scrollview中嵌套listview或者gridview時
成都創新互聯專業為企業提供興安盟網站建設、興安盟做網站、興安盟網站設計、興安盟網站制作等企業網站建設、網頁設計與制作、興安盟企業網站模板建站服務,十多年興安盟做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
如果listview或者gridview的高度時wrap-content會導致兩者只顯示一行多一點
原因:
listview和gridview都繼承于scrollview 兩個scrollview嵌套會導致高度有問題。
核心解決方案:
重寫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內部嵌套gridview防止從底部顯示,加上這行代碼就會從頭部顯示