Android视图高度/宽度更改还原为位置更改时在xml中定义的高度/宽度(滚动)

时间:2015-04-13 17:28:17

标签: android android-layout

在我的Android XML文件中,我已将视图的属性定义为

<RelativeLayout
    android:id="@+id/rlMedia"
    android:gravity="center"
    android:layout_gravity="center"
    android:layout_width="match_parent"
    android:layout_height="150dp">
...
</RelativeLayout>

在我的代码中,我在不同的活动中重用了这个XML文件,但是在一个特定的Activity中,我希望布局具有特定的高度,以保持内部成员的正确宽高比。我使用下面的方法来更新容器的高度。

private void setupMediaHeight(final ViewHolder vh) {
    if (mContext instanceof DetailsActivity) {
        vh.ivPhoto.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                Drawable d = vh.ivPhoto.getDrawable();
                float ratio = ((float) d.getIntrinsicHeight() / ((float) d.getIntrinsicWidth()));
                int aspectFitHeight = Math.round(ratio * ((float) vh.ivPhoto.getWidth()));
                vh.rlMedia.getLayoutParams().height = aspectFitHeight;
                vh.ivPhoto.getLayoutParams().height = aspectFitHeight;
            }
        });
    }
}

所以使用上面的代码,一切看起来都应该如此,但当我的视图滚动或更改时,单元格会更改回其默认高度150dp。我不想仅仅为了一个属性而创建第二个XML文件,我不知道是否添加onLayout监听器并且每次重置高度都是最佳解决方案。我想知道是否有某种方法可以改变150dp的高度“规则”,我在这个特定的活动中设置了视图。

编辑:

这是我如何夸大布局

@Override
public View getView(int position, View v, ViewGroup parent) {
    final Post object = getItem(position);
    ((PostView) v).setup(object, mContext);
    return v;
}

方法setupMediaHeight是我在提取照片后在设置方法中调用的内容。下面的代码是我尝试设置尺寸的地方:

if (photoFile != null) {
    //Get singleton instance of ImageLoader
    ImageLoader imageLoader = ImageLoader.getInstance();
    //Load the image from the url into the ImageView.
    imageLoader.displayImage(photoFile.getUrl(), vh.ivPhoto, new ImageLoadingListener() {
        @Override
            public void onLoadingStarted(String s, View view) {
        }

        @Override
        public void onLoadingFailed(String s, View view, FailReason failReason) {
        }

        @Override
        public void onLoadingComplete(String s, View view, Bitmap bitmap) {
            Drawable pic = vh.ivPhoto.getDrawable();
            setupMediaHeight(vh);
        }

        @Override
            public void onLoadingCancelled(String s, View view) {
        }
    });
}

0 个答案:

没有答案