如何在填充之前测量此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);
}
}
可悲的是,这不起作用。 h
和w
值将为零 - 可能是因为尚未填充gridview。
所以这是我的布局:
<?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>
答案 0 :(得分:0)
所以我发现在这种情况下只有高度没有被设置..它恰好是一个全高度水平分割。所以..我设置混合了LANDSCAPE方向的数据:
h = LayoutUtil.convertDPtoPixels(screen[1], mContext);
w = parent.getWidth();
完美无缺!