我将以下GridView定义为w / stretchMode设置为“columnWidth”。
<GridView android:id="@+id/grid"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:columnWidth="160dp"
android:numColumns="auto_fit"
android:verticalSpacing="10dp"
android:horizontalSpacing="10dp"
android:stretchMode="columnWidth"
android:listSelector="@drawable/list_selector"
/>
GridView中的每个项目结构如下。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="2dp"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
<ImageView android:id="@+id/videoGridItemImage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
/>
<TextView android:id="@+id/videoGridItemDuration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:background="#88000000"
android:textColor="#F1F1F1"
android:textAppearance="@android:style/TextAppearance.Small"
android:padding="2dp"
/>
</FrameLayout>
<TextView android:id="@+id/videoGridItemTitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:textAppearance="@android:style/TextAppearance.Medium"
android:textColor="#F1F1F1"
android:maxLines="1"
android:background="#88000000"
android:paddingLeft="2dp"
android:paddingRight="2dp"
/>
<TextView android:id="@+id/videoGridItemSubtitle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:textStyle="italic"
android:textColor="#666"
android:textAppearance="@android:style/TextAppearance.Small"
android:maxLines="1"
android:background="#88000000"
android:paddingLeft="2dp"
android:paddingRight="2dp"
/>
</LinearLayout>
在GridView的适配器中,我通过将ImageView的url和引用传递给专用类来异步加载和显示图像。该类将图像下载到位图中,然后使用setImageBitmap()更新ImageView。此工作流程按预期运行;但是,我的图像没有填充ImageView的整个宽度。左/右侧有少量的填料。我意识到我可以使用scaleType =“fitXY”,但这并不理想,因为它会使图像偏斜。使用stretchMode =“columnWidth”将ImageView的src属性设置为局部图像可以很好地缩放。我的猜测是ImageView缩放到原始columnWidth而不是拉伸/动态宽度。有没有人知道为什么会发生这种情况和/或如何解决?在此先感谢您的帮助。
答案 0 :(得分:0)
您有两种选择:
将ImageView的layout_width设置为wrap_content。 ImageView将根据图像的大小调整大小,您的列将相应调整。
将ImageView的scaleType设置为centerCrop。这将尝试将图像适合图像视图而不会使其偏斜,并且只会切掉任何不适合的多余部分。这将不留空格。
答案 1 :(得分:0)
我有同样的问题。我的解决方案是覆盖ImageView(在我的情况下)FrameLayout以在图像下载之前设置它的高度。我想在我的GridView中强制执行方块,并完成如下:
public class SquareFrameLayout extends FrameLayout {
public SquareFrameLayout(Context context) {
super(context);
}
public SquareFrameLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SquareFrameLayout(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, widthMeasureSpec);
}
}
每个GridView项目都是:
<com.my.client.ui.layout.SquareFrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/discovery_tile"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/my_image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerCrop"
android:cropToPadding="true"
android:contentDescription="@string/my_desc" />
</com.my.client.ui.layout.SquareFrameLayout>
然后在GridView中我使用了这个:
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:name="com.my.client.ui.MyFragment"
android:id="@+id/my_gridview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="3"
android:verticalSpacing="0px"
android:horizontalSpacing="0px"
android:stretchMode="columnWidth"
android:gravity="fill" />