8

我正在尝试GridView在我的 java 类中以编程方式制作一个,并且一切正常。问题是在GridView. 在xml中,我设法使用以下方法将其删除:

android:listSelector="@null"

但我没有设法在java中做任何类似的事情。我尝试了一些解决方法,比如让GridView10 像素比实际屏幕大,但没有运气。

有没有人有任何代码?

编辑:

我的回答并没有解决问题。赏金还在继续。这是我的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)
    );
4

7 回答 7

6
  • 确保填充在不同密度的屏幕上显示相同的一种方法是将其转换为 DIP 单位。

    int padding = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, -5, 
                                        getResources().getDisplayMetrics());
    
  • 您可以尝试的另一件事是在 xml 中定义一个空可绘制对象。

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

    然后打电话setSelector(R.drawable.null_drawable);

更新:

  • GridView在自己的 xml 中定义你的并膨胀它。

    布局/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));
    
于 2012-09-22T15:50:36.637 回答
2

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

gridView.setSelector(android.R.color.transparent);
于 2012-09-21T19:43:49.173 回答
2

通过以下方式解决它:

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

但是对于不同的屏幕,您需要不同的填充。但这不是一个完整的解决方案。将接受此代码的功能修改。

于 2012-08-27T17:26:43.270 回答
1

我认为您可以在创建动态网格视图时使用 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);
于 2012-09-26T11:17:49.257 回答
0

你见过这个问题为什么我的 Android GridView 周围有多余的像素?? 在这种情况下,问题是在 gridview 上用作选择器的图像有一个填充。

以编程方式应用该问题的建议解决方案,您将设置选择器

gridView.setSelector(android.R.color.transparent)
于 2012-09-26T14:54:23.550 回答
0

setSelector(int) (from AbsListView) 不是你要找的吗?

喜欢setSelector(0)

于 2012-09-21T14:54:09.020 回答
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 的组合。

于 2012-09-26T17:34:36.667 回答