GridView:解决无法有高度的问题
/**
* 解决和ScrollView嵌套使用时,滚动发生冲突
*/
public class MyGridView extends GridView
{
public MyGridView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
public MyGridView(Context context, AttributeSet attrs)
{
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyGridView(Context context)
{
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
// TODO Auto-generated method stub
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
VIewPager:解决事件冲突,不能滑动的问题,必须的设置一个高度,否则无法显示,可根据item计算并动态设置其高度
package com.wangzhi.widget;
import android.content.Context;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.view.MotionEvent;
/**
* @version
* @Date: 2015年11月27日 下午6:09:45
*/
public class GestateViewPager extends ViewPager {
private float mDownX;
private float mDownY;
public GestateViewPager(Context context) {
super(context);
}
public GestateViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
mDownX = ev.getX();
mDownY = ev.getY();
getParent().requestDisallowInterceptTouchEvent(true);
break;
case MotionEvent.ACTION_MOVE:
if (Math.abs(ev.getX() - mDownX) > Math.abs(ev.getY() - mDownY)) {
getParent().requestDisallowInterceptTouchEvent(true);
} else {
getParent().requestDisallowInterceptTouchEvent(false);
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
getParent().requestDisallowInterceptTouchEvent(false);
break;
default:
break;
}
return super.dispatchTouchEvent(ev);
}
}
设置viewpager的高度:初始化时,就设置一个默认高度,否则无法显示
<pre name="code" class="java">private void initHeadView() {
adViewPager = (AdvPagerView) headView.findViewById(R.id.vp_welfare_ad);
int categoryHeight = Tools.dip2px(mContext, 224);
vpCategory = (GestateViewPager) headView.findViewById(R.id.vp_welfare_category);
LayoutParams params = vpCategory.getLayoutParams();
params.height = categoryHeight;
headView.findViewById(R.id.rl_category_parent).getLayoutParams().height = categoryHeight;
llDotsContainer = (LinearLayout) headView.findViewById(R.id.ll_dots_container);
gvActiveManagement = (MyGridView) headView.findViewById(R.id.gv_welfare_management);
lvWelfare.addHeaderView(headView);
}
指示器:下标的小点
/**
*
* @description 设置viewpagerIndicator
* @author zhongwr
* @param dotSize
* 下标点的个数:viewPager共有几页
* @update 2015年5月11日 下午5:51:30
*/
@SuppressLint("NewApi")
private void initDots(int dotSize, int currentIndex) {
if (dotSize > 1 && null != llDotsContainer) {
llDotsContainer.setVisibility(View.VISIBLE);
llDotsContainer.removeAllViews();
ImageView imgDot = null;
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(8, 8);
params.setMargins(5, 0, 0, 0);
for (int i = 0; i < dotSize; i++) {
imgDot = new ImageView(mContext);
imgDot.setLayoutParams(params);
if (i == currentIndex) {
imgDot.setImageResource(R.drawable.fuli_red);
} else {
imgDot.setImageResource(R.drawable.fuli_grey);
}
llDotsContainer.addView(imgDot);
}
} else {
llDotsContainer.setVisibility(View.GONE);
}
}
/**
*
* @description 更新各类item的view数据:活动集中营。。。
* @author zhongwr
* @params
* @update 2016年1月6日 上午11:07:31
*/
private void updateCategoryView() {
int size = spArrayCateMap.size();
List<MyGridView> gridList = new ArrayList<MyGridView>();
for (int i = 0; i < size; i++) {
// listview头部的viewpager(一定要有固定高度)嵌套的gridview,不能使用inflate(无法显示),一定要使用new Gridview,才会显示
// View view = View.inflate(mContext, R.layout.welfare_category_pager_item, null);
// MyGridView gridView = (MyGridView) view.findViewById(R.id.gv_welfare_category_pager);
MyGridView gv = new MyGridView(mContext);
GridView.LayoutParams lParams = new GridView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT,
AbsListView.LayoutParams.WRAP_CONTENT);
gv.setLayoutParams(lParams);
gv.setNumColumns(3);
int horizontalSpace = Tools.dip2px(mContext, 15);
int veritivalSpace = Tools.dip2px(mContext, 21);
gv.setVerticalSpacing(veritivalSpace);
gv.setHorizontalSpacing(horizontalSpace);
gv.setPadding(horizontalSpace, 0, horizontalSpace, 0);
setCategoryAdapter(gv, spArrayCateMap.get(i));
gridList.add(gv);
}
if (!Tools.isListEmpty(gridList)) {
vpCategory.setAdapter(new WelfareCategoryPagerAdapter(mContext, gridList));
initDots(size, 0);
}
}
xml的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/lay_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/group_chat_bottom" >
<RelativeLayout
android:id="@+id/include_title_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<include layout="@layout/basenormaltitle" />
<TextView
android:id="@+id/tv_welfare_feedback"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:layout_marginLeft="18dp"
android:padding="10dp"
android:text="意见反馈"
android:textColor="@color/blue_1"
android:textSize="14dp" />
<ImageView
android:id="@+id/iv_welfare_mine"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="18dp"
android:src="@drawable/welfare_my" />
</RelativeLayout>
<com.PullToRefreshListView
android:id="@+id/lv_welfare_fragment"
style="@style/AttentionListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/include_title_parent"
android:divider="@null"
android:scrollbars="none" >
</com.PullToRefreshListView>
</RelativeLayout>
listview中嵌套的头部布局header.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
android:orientation="vertical" >
<com.AdvPagerView
android:id="@+id/vp_welfare_ad"
android:layout_width="match_parent"
android:layout_height="135dp" />
<!-- 运营位:分类入口item -->
<RelativeLayout
android:id="@+id/rl_category_parent"
android:layout_width="match_parent"
android:layout_height="224dp"
android:layout_marginBottom="17dp"
android:layout_marginTop="15dp" >
<com.GestateViewPager
android:id="@+id/vp_welfare_category"
android:layout_width="match_parent"
android:layout_height="224dp"
android:persistentDrawingCache="animation" />
<LinearLayout
android:id="@+id/ll_dots_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="18dp"
android:background="@color/transparent"
android:orientation="horizontal" />
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="10dp"
android:background="@color/bg_1" />
<!-- 运营位 :活动精选 -->
<RelativeLayout
android:id="@+id/rl_management_title_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="20dp"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_marginTop="20dp"
android:gravity="center_vertical" >
<TextView
android:id="@+id/tv_management_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_marginLeft="15dp"
android:layout_marginRight="15dp"
android:layout_weight="1"
android:drawableLeft="@drawable/fuli_activity"
android:drawablePadding="7dp"
android:text="活动精选"
android:textColor="@color/red_1"
android:textSize="16dp" />
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_centerVertical="true"
android:layout_toLeftOf="@id/tv_management_title"
android:background="@color/gray7_horizontal_line" />
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/tv_management_title"
android:background="@color/gray7_horizontal_line" />
</RelativeLayout>
<com.MyGridView
android:id="@+id/gv_welfare_management"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:horizontalSpacing="9dp"
android:numColumns="2"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:layout_marginBottom="20dp"
android:verticalSpacing="9dp" />
</LinearLayout>
注:整个界面是一个listview;listview的头部嵌套一个viewpager,viewpager放置gridview,解决girdview无法滑动的问题