这是交易:
我有GridView
android:numColumns="2"
。 GridView
中的项目为ImageViews
android:layout_weight="1"
,因此它们是屏幕宽度的一半。问题是height
属性,它应该等于宽度。我尝试使用scaleype
,到目前为止没有成功。
如何设置GridView
元素的宽度以填充屏幕的一半并将其高度设置为等于其宽度?
答案 0 :(得分:2)
您必须以编程方式获取ImageViews宽度,然后设置高度。
但如果您只使用 img.getWidth()
;例如。在OnCreate()
中,它会返回0
,因为它还没有被绘制。
所以你必须在OnCreate()
中做这样的事情:
ImageView img = (ImageView) findViewById(R.id.img);
ViewTreeObserver vto = img.getViewTreeObserver();
vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
int x;
img.getViewTreeObserver().removeOnPreDrawListener(this);
x = img.getMeasuredWidth();
img.setLayoutParams(new LinearLayout.LayoutParams(x,x));
return true;
}
});
这将在绘制后获得Imageview的宽度,并将其高度设置为等于它。
答案 1 :(得分:0)
要将ImageView
设置为等于屏幕的一半,您需要将以下内容添加到ImageView
的XML中:
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:scaleType="fitXY"
android:adjustViewBounds="true"/>
然后要将高度设置为等于此宽度,您需要在代码中执行此操作。在getView
适配器的GridView
方法中,将ImageView
高度设置为等于其测量宽度:
int measuredImageWidth = mImageView.getMeasuredWidth();
mImageView.getLayoutParams().height = measuredImageWidth;
希望这有帮助!