在我的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) {
}
});
}