如何使用viewpager将GridView置于片段中心

时间:2014-08-26 11:07:53

标签: android gridview android-fragments

我在ViewPager的片段中有一个Gridview。我有2x2网格,我想以父视图为中心,ViewPager。它是displaying like this,只能水平居中而不是垂直居中我的xml文件如下。

这是activity_main_menu.xml

<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/background"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_below="@+id/actionBar"
        android:scaleType="centerCrop"
        android:background="@drawable/home_01" />

    <android.support.v4.view.ViewPager 
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/pager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:layout_below="@+id/actionBar"
        android:layout_above="@+id/buttonBar"
        tools:context="com.excitingspace.areias_do_seixo.MainMenu" >
    </android.support.v4.view.ViewPager>

    <com.viewpagerindicator.CirclePageIndicator
        android:id="@+id/titles"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="15dp"
        android:layout_above="@+id/buttonBar"/>

</RelativeLayout>

这是fragment_main_menu.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.excitingspace.areias_do_seixo.MainMenu$PlaceholderFragment" >

    <GridView
        android:id="@+id/gridView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentTop="true"
        android:columnWidth="150dp"
        android:gravity="center"
        android:listSelector="@android:color/transparent" 
        android:horizontalSpacing="10dp"
        android:layout_centerInParent="true"
        android:numColumns="2"
        android:verticalSpacing="10dp" >

    </GridView>

</RelativeLayout>

EDIT,添加了用于填充GridView的ImageAdapter:

public class ImageAdapter extends BaseAdapter {

private static int PADDING = 0;
private static int WIDTH = 0;
private static int HEIGHT = 0;
private Context mContext;
private List<Integer> mThumbIds;
private List<Integer> mThumbIds_highlighted;

public ImageAdapter(Context c, List<Integer> ids, List<Integer> ids_highlighted) {
    mContext = c;
    this.mThumbIds = ids;
    this.mThumbIds_highlighted = ids_highlighted;

    int baseWidth = 150;
    int baseHeight = 150;
    int basePading = 20;
    float density = mContext.getResources().getDisplayMetrics().density;

    if ((mContext.getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE)
    {     
        baseWidth = 200;
        baseHeight = 200;
        basePading = 20;
    }


    ImageAdapter.WIDTH = (int) (baseWidth * density + 0.5f);
    ImageAdapter.HEIGHT = (int) (baseHeight * density + 0.5f);
    ImageAdapter.PADDING = (int) (basePading * density + 0.5f);
}



@Override
public int getCount() {
    return mThumbIds.size();
}

@Override
public Object getItem(int position) {
    return null;
}

// Will get called to provide the ID that
// is passed to OnItemClickListener.onItemClick()
@Override
public long getItemId(int position) {
    return mThumbIds.get(position);
}

// create a new ImageView for each item referenced by the Adapter


@SuppressWarnings("deprecation")
@Override
public View getView(final int position, View convertView, ViewGroup parent)
{

    ImageView imageView = (ImageView) convertView;
    StateListDrawable sld = new StateListDrawable();
    Drawable draw1 = mContext.getResources().getDrawable(mThumbIds.get(position));
    Drawable draw2 = mContext.getResources().getDrawable(mThumbIds_highlighted.get(position));

    sld.addState(new int[] { android.R.attr.state_pressed }, draw2);
    sld.addState(StateSet.WILD_CARD, draw1);

    // if convertView's not recycled, initialize some attributes
    if (imageView == null) {
        imageView = new ImageView(mContext);    
        imageView.setLayoutParams(new GridView.LayoutParams(WIDTH, HEIGHT));
        imageView.setPadding(PADDING, PADDING, PADDING, PADDING);
//      imageView.setScaleX();
    }

    imageView.setBackgroundDrawable(sld);


    return imageView;
}

}

1 个答案:

答案 0 :(得分:1)

像这样修改你的fragment_main_menu.xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.excitingspace.areias_do_seixo.MainMenu$PlaceholderFragment" >

    <GridView
        android:id="@+id/gridView"
         android:layout_width="match_parent"
            android:layout_height="wrap_content"

        android:columnWidth="150dp"
       android:gravity="center_vertical"
        android:listSelector="@android:color/transparent" 
        android:horizontalSpacing="10dp"
        android:layout_centerInParent="true"
        android:numColumns="2"
        android:verticalSpacing="10dp" >

    </GridView>

</RelativeLayout>