我正在尝试在我的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)
);
答案 0 :(得分:6)
确保填充在不同密度的屏幕上显示相同的一种方法是将其转换为DIP单位。
int padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -5,
getResources().getDisplayMetrics());
您可以尝试的另一件事是在xml中定义一个null 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));
答案 1 :(得分:2)
通过以下方式解决了这个问题:
gridView.setPadding(-5, 0, -5, 0);
但是你需要为不同的屏幕使用不同的填充。但它不是一个完整的解决方案。将接受此代码的功能修改。
答案 2 :(得分:2)
要获得与使用android:listSelector="@null"
相同的效果,但在代码中,您需要使用setSelector()作为marvinXXII提及。
但是您需要传入有效的ResourceId或使用setSelector(Drawable sel)
变体。
不幸的是,它不可能将null
传递给该方法,因为这将导致NullPointerException。
描述here的解决方法是使用它:
gridView.setSelector(android.R.color.transparent);
答案 3 :(得分:1)
我认为你可以在创建动态gridview时使用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);
答案 4 :(得分:0)
setSelector(int)(来自AbsListView
)不是您要找的吗?
赞setSelector(0)
答案 5 :(得分:0)
您是否见过这个问题Why are there extra pixels around my Android GridView??在这种情况下,问题是在gridview上用作选择器的图像有一个填充。
以编程方式应用该问题的建议解决方案,您将set the selector
gridView.setSelector(android.R.color.transparent)
答案 6 :(得分:0)
使用以下设置对我有用:
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"/>
我认为您需要的可能是透明选择器和重力设置为CENTER_HORIZONTAL的组合。