Gridview元素没有在relativeLayout中居中

时间:2013-11-22 02:47:18

标签: android gridview

我在我的应用程序中使用gridview,如果我的适配器中只有一个元素并且一行中最多有三个元素,我想让我的视图居中。但由于某种原因,一个元素没有居中。 请帮助我。

这是我的父布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical|center_horizontal"
     >

    <RelativeLayout
        android:id="@+id/cplist_title_layout"
        android:layout_width="wrap_content"
        android:layout_height="74dp"
        android:gravity="center_vertical" >

        <TextView
            android:id="@+id/cplist_title"
            android:layout_width="match_parent"
            android:layout_height="74dp"
            android:layout_marginLeft="32dp"
            android:layout_marginRight="32dp"
            android:gravity="left|center_vertical"
            android:textColor="@color/RGB_0_176_241"
            android:textSize="19dp" />
    </RelativeLayout>

    <RelativeLayout
        android:id="@+id/cplist_grid_layout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/cplist_title_layout"
        android:paddingTop="8dp" >

        <GridView
            android:id="@+id/cp_gridView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="21dp"
            android:layout_marginLeft="32dp"
            android:layout_marginRight="32dp"
            android:layout_marginTop="8dp"
            android:numColumns="auto_fit"
            android:verticalSpacing="0dp"
            android:horizontalSpacing="0dp"
             >
        </GridView>
    </RelativeLayout>

</RelativeLayout>

这是我的网格视图项目布局

<RelativeLayout
    android:id="@+id/detail_cplist_item_logo"
    android:layout_width="match_parent"
    android:layout_height="108dp"
    android:gravity="center_vertical"
    android:layout_marginLeft="10dp" >

    <ImageView
        android:id="@+id/detail_cplist_item_cplogo_bg"
        android:layout_width="225dp"
        android:layout_height="104dp"
        android:layout_centerVertical="true"
        android:background="@color/RGB_23_27_33"
        android:gravity="center" />


</RelativeLayout>

<RelativeLayout
    android:id="@+id/detail_cplist_item_details"
    android:layout_width="match_parent"
    android:layout_height="59dp"
    android:layout_below="@id/detail_cplist_item_logo"
    android:gravity="center_vertical"
    android:layout_marginLeft="10dp" >

    <LinearLayout
        android:id="@+id/detail_cplist_item_price"
        android:layout_width="match_parent"
        android:layout_height="31dp"
         >

        <TextView
            android:id="@+id/detail_cp_price_text"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="6dp"
            android:layout_marginTop="4dp"
            android:gravity="left"
            android:text="Free"
            android:textColor="@color/RGB_100_217_217_217"
            android:textSize="18dp" />
    </LinearLayout>

    <RelativeLayout
        android:id="@+id/detail_cplist_item_quality_section"
        android:layout_width="37dp"
        android:layout_height="19dp"
        android:layout_below="@id/detail_cplist_item_price"
        android:layout_centerVertical="true"
        android:layout_marginBottom="9dp"
         >

        <ImageView
            android:id="@+id/detail_cplist_item_quality"
            android:layout_width="37dp"
            android:layout_height="19dp"
            android:gravity="center"
            android:src="@drawable/common_selector_icon_hd" />
    </RelativeLayout>

    <ImageView
        android:id="@+id/detail_cplist_item_tag_tv"
        android:layout_width="21dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/detail_cplist_item_price"
        android:layout_centerVertical="true"
        android:layout_marginLeft="9dp"
        android:layout_toRightOf="@id/detail_cplist_item_quality_section"
        android:src="@drawable/tag_tv"
        android:visibility="invisible" />

    <ImageView
        android:id="@+id/detail_cplist_item_tag_mobile"
        android:layout_width="21dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/detail_cplist_item_price"
        android:layout_centerVertical="true"
        android:layout_marginLeft="3dp"
        android:layout_toRightOf="@id/detail_cplist_item_tag_tv"
        android:src="@drawable/tag_mobile" />

    <ImageView
        android:id="@+id/detail_cplist_item_live_icon"
        android:layout_width="37dp"
        android:layout_height="19dp"
        android:layout_below="@id/detail_cplist_item_price"
        android:layout_centerVertical="true"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@id/detail_cplist_item_quality_section"
        android:src="@drawable/tag_live"
        android:visibility="invisible" />
</RelativeLayout>

3 个答案:

答案 0 :(得分:0)

而不是重力,设置:

android:layout_centerInParent="true"

答案 1 :(得分:0)

有同样的问题......我用覆盖的onMeasure()

解决了这个问题
public class GridViewEx extends GridView {

    private int mRequestedNumColumns = 0;

    public GridViewEx(Context context) {
        super(context);
    }

    public GridViewEx(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public GridViewEx(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override
    public void setNumColumns(int numColumns) {
        super.setNumColumns(numColumns);

        if (numColumns != mRequestedNumColumns) {
            mRequestedNumColumns = numColumns;
        }
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        if (mRequestedNumColumns > 0) {
            int width = (mRequestedNumColumns * getColumnWidth())
                    + ((mRequestedNumColumns-1) * getHorizontalSpacing())
                    + getListPaddingLeft() + getListPaddingRight();

            setMeasuredDimension(width, getMeasuredHeight());    
        }
    }
}

答案 2 :(得分:0)

我正在使用

android:layout_below="@+id/msg"

我将其删除并使用后工作正常

android:layout_centerInParent="true"