以编程方式移除GridView周围的额外空间

我正在尝试在我的Java类中以编程方式生成一个GridView ,并且一切正常。 问题是在GridView周围自动生成5像素的填充。 在XML我设法删除它使用:

 android:listSelector="@null" 

但是我不能在java中做类似的事情。 我已经尝试了一些解决方法,比如使GridView 10像素,然后实际屏幕没有运气。

有没有人有这个代码?

编辑:

我的回答并不能解决问题。 还有一个赏金。 这是我的GridView代码:

  GridView gridView = new GridView(this); gridView.setNumColumns(someInt); gridView.setAdapter (new MyCustomAdapter(this)); gridView.setLayoutParams(new GridView.LayoutParams( customValue, LayoutParams.FILL_PARENT, Gravity.CENTER_HORIZONTAL) ); 

Solutions Collecting From Web of "以编程方式移除GridView周围的额外空间"

  • 在不同密度的屏幕上,确保填充效果的方法之一就是将其转换为DIP单元。

     int padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -5, getResources().getDisplayMetrics()); 
  • 其他的事情你可以尝试的是在XML中定义一个空的drawable。

     <?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="null_drawable">@null</drawable> ... </resources> 

    然后调用setSelector(R.drawable.null_drawable);

更新:

  • 在你自己的xml中定义你的GridView ,然后膨胀它。

    布局/ mygrid.xml

     <?xml version="1.0" encoding="utf-8"?> <GridView android:layout_width="fill_parent" android:layout_height="fill_parent" android:listSelector="@null"/> 

    在java中,

     GridView gridView = (GridView)inflater.inflate(R.layout.mygrid, null); gridView.setLayoutParams(new GridView.LayoutParams(customValue, LayoutParams.FILL_PARENT)); gridView.setNumColumns(someInt); gridView.setAdapter (new MyCustomAdapter(this)); 

通过以下方式解决了它:

  gridView.setPadding(-5, 0, -5, 0); 

但是你需要不同的屏幕填充。 但这不是一个完整的解决scheme。 此代码的function性修改将被接受。

要像使用android:listSelector="@null"一样获得相同的效果,但是在代码中,您需要使用setSelector()作为提到的marvinX​​XII。 但是你需要传递一个有效的ResourceId或使用setSelector(Drawable sel)变体。 不幸的是,它不可能将null传递给该方法,因为这将导致NullPointerException。 这里描述的解决方法是使用这个:

 gridView.setSelector(android.R.color.transparent); 

我想你可以在创builddynamicgridview的时候使用setPadding去除这个问题。

 int grids_height = (int) TypedValue.applyDimension( TypedValue.COMPLEX_UNIT_DIP, (int) (Row_num * 80), getResources().getDisplayMetrics()); Log.v("", "" + grids_height); gridview = new GridView(this); gridview.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, grids_height)); gridview.setPadding(0, 3, 0, 0); gridview.setBackgroundColor(Color.TRANSPARENT); gridview.setNumColumns(7); gridview.setVerticalSpacing(1); gridview.setHorizontalSpacing(1); gridview.setGravity(Gravity.CENTER_HORIZONTAL); gridview.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); 

setSelector(int) (来自AbsListView )是不是你在找什么?

setSelector(0)

你见过这个问题为什么我的Android GridView附近有额外的像素? ? 在这种情况下,问题是在gridview中用作select器的图像有一个填充。

以编程方式应用来自该问题的build议解决scheme,您将设置select器

 gridView.setSelector(android.R.color.transparent) 

使用以下设置适用于我:

 public ContactContainer(Context context, AttributeSet attrs) { super(context, attrs); gallery = new GridView(context, attrs); gallery.setNumColumns(numColumns); gallery.setStretchMode(stretchMode); gallery.setSmoothScrollbarEnabled(smoothScrollbar); gallery.setSelector(listSelector); gallery.setGravity(Gravity.CENTER_HORIZONTAL); this.addView(gallery); } 

我将它与这段XML代码结合使用:

 <de.ramicro.SClip.components.ContactContainer android:id="@+id/gridview_gallery_contacts" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/contact_gallery_bottom_bar" android:layout_below="@id/contact_gallery_top_bar" android:padding="0dip"/> 

我认为你需要的可能是一个透明的select器和重力设置为CENTER_HORIZONTAL的组合。