如何在填充之前测量gridview?

时间:2016-04-03 20:24:35

标签: android gridview responsive-design

如何在填充之前测量此gridview?

我有一个girdview我正在填写海报。起初我只是在处理电话布局,现在我正在使用平板电脑布局...不完全是最好的计划。无论如何,最初,视图的大小是根据屏幕测量设置的,如下所示:

float[] screen = LayoutUtil.getScreen(mContext);

h = LayoutUtil.convertDPtoPixels(screen[1], mContext);
w = LayoutUtil.convertDPtoPixels(screen[0], mContext);

如果不是很明显,我应该在这里指出这是在活动中,但现在重构平板电脑它是在加载gridview的片段中。

我需要根据平板电脑的大小和方向调整网格中的视图大小,然后我掀起了这个小片段:

if (null == convertView) {
    convertView = inflater.inflate(R.layout.grid_poster, parent, false);
}

ImageView iv = (ImageView) convertView;

int h, w;
{
    Configuration conf = getContext().getResources().getConfiguration();
    if((Configuration.ORIENTATION_LANDSCAPE == conf.orientation) &&
        (600 <= conf.smallestScreenWidthDp)) {
        Rect r = new Rect();
        convertView.getLocalVisibleRect(r);

        h = r.height();
        w = r.width();
    } else {
        float[] screen = LayoutUtil.getScreen(mContext);

        h = LayoutUtil.convertDPtoPixels(screen[1], mContext);
        w = LayoutUtil.convertDPtoPixels(screen[0], mContext);
    }
}

可悲的是,这不起作用。 hw值将为零 - 可能是因为尚未填充gridview。

所以这是我的布局:

布局sw600dp宽/内容海报board.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="xyz.selfenrichment.robertotomas.popularmovies.PosterBoardActivity"
    tools:showIn="@layout/activity_poster_board">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <GridView android:id="@+id/posters_grid"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:numColumns="1"
            android:gravity="center"
            android:stretchMode="columnWidth"
            android:layout_weight="3"
            app:layout_behavior="@string/appbar_scrolling_view_behavior" />

        <fragment android:id="@+id/fragment_forecast"
            android:name="xyz.selfenrichment.robertotomas.popularmovies.MovieDetailsFragment"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="2"
            tools:layout="@android:layout/list_content" />
    </LinearLayout>

</FrameLayout>

这只是包含在活动中,您可能不需要,但是:

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context="xyz.selfenrichment.robertotomas.popularmovies.PosterBoardActivity">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_poster_board" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_menu_manage"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end" />

</android.support.design.widget.CoordinatorLayout>

1 个答案:

答案 0 :(得分:0)

所以我发现在这种情况下只有高度没有被设置..它恰好是一个全高度水平分割。所以..我设置混合了LANDSCAPE方向的数据:

h = LayoutUtil.convertDPtoPixels(screen[1], mContext);
w = parent.getWidth();

完美无缺!