在SO中多次询问,如何删除GridView
中的填充,但没有一个答案适合我。
我有GridView
,并设置列数和网格布局的总宽度。需要66dp
x 66dp
尺寸的商品。不知何故,物品是平方的,但66x66的尺寸较小,周围有一个巨大的衬垫。为什么?
int zz = .. // number of columns comes from outside
gridview.setNumColumns(zz);
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams)gridview.getLayoutParams();
linearParams.width=66*zz;
gridview.setLayoutParams(linearParams);
<HorizontalScrollView
android:id="@+id/horizontalScrollView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="66dp"
android:layout_marginRight="0dp"
android:layout_marginLeft="108dp"
android:layout_marginBottom="0dp">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal">
<GridView
android:id="@+id/gridView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="0dp"
android:columnWidth="66dp"
android:gravity="center"
android:horizontalSpacing="0dp"
android:scrollbarAlwaysDrawHorizontalTrack="true"
android:scrollbarAlwaysDrawVerticalTrack="true"
android:scrollbars="horizontal"
android:stretchMode="none"
android:verticalSpacing="0dp"
android:listSelector="@null"
android:scaleType="centerCrop">
</GridView>
</LinearLayout>
</HorizontalScrollView>
项目原型
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="66dp" android:layout_height="66dp">
<ImageView
android:id="@+id/icon"
android:layout_width="66dp"
android:layout_height="66dp"
android:padding="0dp"
android:background="@android:color/holo_orange_light"/>
</RelativeLayout>
shreen shot
使用适配器加载内容/图像。
@Override
public void onBindViewHolder(RatingHolder ratingHolder, int i) {
ratingHolder.icon.setImageResource(R.drawable.asdf);
//ratingHolder.icon.setAdjustViewBounds(true);
}
答案 0 :(得分:0)
您使用的ImageView
未定义scaleType。
ImageView
的默认值为FIT_CENTER
,但可能是您使用的图片尺寸不完全符合视图宽高比。
您最有可能需要CENTER_CROP
来满足您的需求
<ImageView
android:id="@+id/icon"
android:scaleType="centerCrop"
android:layout_width="66dp"
android:layout_height="66dp"
android:padding="0dp"
android:background="@android:color/holo_orange_light"/>
可以找到行动中所有ImageView.ScaleType
值的直观示例here
答案 1 :(得分:0)
首先,您不应该使用fill_parent
,它已重命名为match_parent
。
其次,这段代码:
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) gridview.getLayoutParams();
linearParams.width= 66 * zz;
gridview.setLayoutParams(linearParams);
基本上是将GridView
的宽度设置为wrap_content
,所以请在XML中这样做。此外,如果您根据屏幕宽度设置列数,则可以更轻松地完成此操作。通过将GridView
的宽度设置为match_parent
,并将numColumns
设置为auto_fit
。或者使用integers.xml
值资源,并使用资源限定符(例如values
,values-w600dp
和values-w840dp
)为不同的屏幕宽度设置整数。
接下来,设置gravity="center"
可能是您的填充问题的来源,因为该属性正试图将视图置于GridView
的中心位置。
最后,您将视图包装为不必要的布局。任何View
都可以作为XML的基础,您无需将它们包装在&#34; layout&#34;中。您的GridView
看起来应该更像这样:
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/grid_view_1"
android:layout_width="wrap_content" android:layout_height="match_parent"
android:stretchMode="none" android:numColumns="@integer/column_number"/>
你的ImageView
就像这样:
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/icon" android:layout_width="66dp" android:layout_height="66dp"
android:scaleType="centerCrop"/>
这些更改可能无法立即解决您的问题,但它们会为您提供更易于管理的内容。