【发布时间】:2019-04-10 08:12:45
【问题描述】:
我知道在 StackOverflow 中以许多不同的方式提出了这个问题,但似乎没有一个答案适合我的问题。
从这张图片 (https://imgur.com/a/9MIlzwe) 中可以看出,我在 GridView 的底部得到了一个难看的空间,因为行没有按比例拉伸以覆盖 GridView 的所有高度。我已经尝试了很多不同的代码,所以在这里写它们是没有用的。我要做的是展示我目前拥有的与问题相关的代码片段。
在显示其中的图像之前,我首先计算 GridView 的尺寸。我想要 3 列和 3 行,这就是为什么在 setDimensions 中我在两种情况下都除以 COLUMNS(因为它是一个值为 3 的常量 int):
private void setDimensions() {
ViewTreeObserver vto = mGridView.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mGridView.getViewTreeObserver().removeOnGlobalLayoutListener(this);
int displayWidth = mGridView.getMeasuredWidth();
int displayHeight = mGridView.getMeasuredHeight();
mColumnWidth = displayWidth / COLUMNS;
mColumnHeight = displayHeight / COLUMNS;
display(getApplicationContext());
}
});
}
private static void display(Context context) {
ArrayList<ImageView> imgs = new ArrayList<>();
ImageView image;
/*
...More code
*/
mGridView.setAdapter(new CustomAdapter(imgs, mColumnWidth, mColumnHeight));
}
我的适配器类的getView()方法:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = imgs.get(position);
} else {
imageView = (ImageView) convertView;
}
android.widget.AbsListView.LayoutParams params = new android.widget.AbsListView.LayoutParams(mColumnWidth, AbsListView.LayoutParams.WRAP_CONTENT);
imageView.setLayoutParams(params);
return imageView;
}
我在搜索它时多次遇到的解决方案之一是为视图(在本例中为 ImageView)膨胀布局,然后为 ImageView 使用android:adjustViewBounds="true",但这没有效果.
按照 Ferran 的要求,这是我尝试膨胀 ImageView 的代码:
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_centerInParent="true"
android:scaleType="fitXY"
android:adjustViewBounds="true"
/>
上面的代码将与此结合:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
LayoutInflater layoutInflater = LayoutInflater.from(mContext);
imageView = (ImageView) layoutInflater.inflate(R.layout.image_item, parent, false);
} else {
imageView = (ImageView) convertView;
}
imageView.setMinimumHeight(mColumnHeight/3);
imageView.setMinimumWidth(mColumnWidth/3);
return imageView;
}
结果将是白屏死机:https://imgur.com/a/GJXRsxV
【问题讨论】:
-
您想增加行间距还是拉伸图像以填满整个可用空间(这会改变比例)?
-
您好@Ferran 我想拉伸图像以填充整个可用空间,我不在乎是否会丢失比例。但我想让行平均伸展。尽管我不关心图片的拉伸,但我确实需要行的高度相同。
-
试试这个:- 在你的 ImageView 中添加这个--> android:adjustViewBounds="true"
-
@ChaudharyAmar 请检查最后一段
标签: android android-imageview baseadapter android-gridview