Android 删除GridView中的填充
在SO中,有人多次询问如何删除Android 删除GridView中的填充,android,gridview,Android,Gridview,在SO中,有人多次询问如何删除GridView中的填充,但没有一个答案适合我 我有一个网格视图,可以设置网格布局的列数和总宽度。需要尺寸为66dpx66dp的物品。不知何故,物品是方形的,但比66x66小,周围有大量填充物。为什么? int zz = .. // number of columns comes from outside gridview.setNumColumns(zz); LinearLayout.LayoutParams linearParams = (LinearLayou
GridView
中的填充,但没有一个答案适合我
我有一个网格视图
,可以设置网格布局的列数和总宽度。需要尺寸为66dp
x66dp
的物品。不知何故,物品是方形的,但比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);
您正在使用的
ImageView
没有定义
ImageView
的默认值为FIT_CENTER
,但可能是您使用的图像大小不完全适合视图纵横比
您很可能需要CENTER\u 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
值的可视示例您正在使用的ImageView
没有定义
ImageView
的默认值为FIT_CENTER
,但可能是您使用的图像大小不完全适合视图纵横比
您很可能需要CENTER\u 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
值的可视示例。首先,您不应该使用fill\u parent
,它已重命名为match\u parent
第二,该守则:
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) gridview.getLayoutParams();
linearParams.width= 66 * zz;
gridview.setLayoutParams(linearParams);
实际上是将GridView
的宽度设置为wrap\u content
,所以在XML中这样做。此外,如果您根据屏幕宽度设置列数,则可以更轻松地进行设置。通过将GridView
的宽度设置为match\u parent
,并将numColumns
设置为auto\u fit
。或者使用integers.xml
values资源,并使用资源限定符,如values
、values-w600dp
和values-w840dp
为不同的屏幕宽度设置整数
接下来,设置gravity=“center”
可能是填充问题的根源,因为该属性正试图在GridView
中使视图居中
最后,将视图包装为不必要的布局。任何视图
都可以是XML的基础,您不需要将它们包装在“布局”中。您的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 xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/icon" android:layout_width="66dp" android:layout_height="66dp"
android:scaleType="centerCrop"/>
这些更改可能不会立即解决您的问题,但会使您的工作更易于管理。首先,您不应使用
填充父项
,它已重命名为匹配父项
第二,该守则:
LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) gridview.getLayoutParams();
linearParams.width= 66 * zz;
gridview.setLayoutParams(linearParams);
实际上是将GridView
的宽度设置为wrap\u content
,所以在XML中这样做。此外,如果您根据屏幕宽度设置列数,则可以更轻松地进行设置。通过将GridView
的宽度设置为match\u parent
,并将numColumns
设置为auto\u fit
。或者使用integers.xml
values资源,并使用资源限定符,如values
、values-w600dp
和values-w840dp
为不同的屏幕宽度设置整数
接下来,设置gravity=“center”
可能是填充问题的根源,因为该属性正试图在GridView
中使视图居中
最后,将视图包装为不必要的布局。任何视图
都可以是XML的基础,您不需要将它们包装在“布局”中。您的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 xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/icon" android:layout_width="66dp" android:layout_height="66dp"
android:scaleType="centerCrop"/>
这些更改可能不会立即解决您的问题,但它们会使您的工作更易于管理。选中的
CENTER\u-CROP
没有帮助,进行任何更改您是否可以提供导致问题的图像的链接?添加到后检查CENTER\u-CROP
的图像没有帮助,进行任何更改您是否可能提供导致问题的图像的链接?图像添加到帖子您使用什么代码加载图像?添加下面的代码,使用适配器加载图像?添加下面的代码,使用适配器加载图像?添加下面的代码,使用适配器Anyway列数不基于屏幕宽度设置,列数来自不同的来源,GridView
位于LinearLayout
中,通常比屏幕宽得多。移除android:gravity=“center”无效。需要LinearLayout
因为要水平滚动GridView
@János好的,如果它来自其他地方,你可以调用GridView.setNumColumns()
,如果你设置android:layout\u width=“wrap\u content”
GridView可以垂直滚动,你不需要任何其他代码,但我想水平滚动以及。所以我把它放到了一个线性布局中。而GridView
可以有上百个列。@János你不需要LinearLayout
这样做,只要所有列的宽度大于视图的宽度,GridView
就可以水平滚动。我不能水平滚动,做了一个POC,具有较高的列宽度
和numColumns
但图像只是相互重叠,但无法滚动。列数不基于屏幕宽度设置,列数来自不同来源,GridView
位于线性布局
通常比屏幕宽得多。移除android:gravity=“center”
无效。需要LinearLayout
因为要水平滚动GridView
@János好的,如果它来自其他地方,您可以调用GridView.setNumColumns()
,如果设置