【问题标题】:Removing the extra padding in a GridView in android在 android 的 GridView 中删除额外的填充
【发布时间】:2011-10-16 03:39:59
【问题描述】:

我想删除出现在网格视图中的额外填充。我有大小为 128*128 的图像,它们将占据网格中的单元格。但不知何故,有一个额外的空间被添加到网格的内容中。

经过一番研究,我能够确定我必须覆盖网格视图的 listSelector 属性。现在这是我的问题 - 我知道我必须在这里指定类似 xml drawable 的东西,但是在其中指定什么?我尝试使用可绘制的形状,并将填充和笔画设置为 0dp,但无济于事。

here 提出并回答了这个问题,但他们没有给出可绘制对象必须包含的内容。

有人可以帮我解决这个问题吗?谢谢!

编辑:好的 - here 是我拥有的 UI 的副本。同样的XML布局如下:

<GridView android:id="@+id/GV_A2ZMenu" android:layout_width="fill_parent"
    android:layout_height="wrap_content" android:numColumns="4"
            android:layout_gravity="top" android:stretchMode="columnWidth"
    android:gravity="center" android:listSelector="@null" />

我正在使用 BaseAdapter 类来填充 gridView。这是它的代码:

public class AtoZMenu extends BaseAdapter {

private static Context AppC;

private Integer[] MenuImg = { R.drawable.alphabet_a, R.drawable.alphabet_b,
        R.drawable.alphabet_c, R.drawable.alphabet_d,
        R.drawable.alphabet_e, R.drawable.alphabet_f,
        R.drawable.alphabet_g, R.drawable.alphabet_h,
        R.drawable.alphabet_i, R.drawable.alphabet_j,
        R.drawable.alphabet_k, R.drawable.alphabet_l,
        R.drawable.alphabet_m, R.drawable.alphabet_n,
        R.drawable.alphabet_o, R.drawable.alphabet_p,
        R.drawable.alphabet_q, R.drawable.alphabet_r,
        R.drawable.alphabet_s, R.drawable.alphabet_t,
        R.drawable.alphabet_u, R.drawable.alphabet_v,
        R.drawable.alphabet_w, R.drawable.alphabet_x,
        R.drawable.alphabet_y, R.drawable.alphabet_z };

public AtoZMenu(Context C) {
    AppC = C;
}

public int getCount() {
    return MenuImg.length;
}

public Object getItem(int position) {
    return null;
}

public long getItemId(int position) {
    return 0;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ImageView IV;
    float density = AppC.getResources().getDisplayMetrics().density;

    if (convertView == null) {
        IV = new ImageView(AppC);
        IV.setMaxHeight((int) (1));
    } else {
        IV = (ImageView) convertView;
    }
    IV.setImageResource(MenuImg[position]);
    return IV;
}
 }

你能找出错误吗?

注意:最后我在表格布局中实现了一个类似的屏幕,它呈现了更好的网格。

【问题讨论】:

  • 截图将有助于理解问题以及您的布局 XML 文件
  • 已编辑问题,其中包含指向已回答的类似问题的链接,但缺少实现!
  • @MarvinLabs:我已经发布了 UI 和我为此使用的 xml 布局代码。你能找出问题所在吗??

标签: android gridview cellpadding


【解决方案1】:

是的,我遇到了同样的问题。您想将 listSelector 设置为 @null:

<!-- Setting the listSelector to null removes the 5px border -->
<GridView
    android:id="@+id/view"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:listSelector="@null" />

另外,请尝试以下操作:

myGridView.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);

我知道你可以在 XML 中做到这一点,但当我遇到同样的问题时我没有这样做;不知道为什么。

我还硬编码了键高:

float density = getContext().getResources().getDisplayMetrics().density;
mKeyHeight = (int) (56 * density);
....
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ImageButton b = (ImageButton) convertView;
    if (b == null) {
        b = new ImageButton(getContext());
        b.setMinimumHeight(mKeyHeight);
        b.setBackgroundResource(R.drawable.btn_keyboard_key);
        b.setOnClickListener(this);
    }
}

很抱歉没有给出准确的答案,如果您在那之后仍然需要帮助,请告诉我。

【讨论】:

  • 啊!没有。我尝试将其指定为空。它没有帮助。无论如何,我已经包含了我的 UI 的屏幕截图和我使用的代码。看看你能不能从中找到一个缺陷..
  • 如果您添加了用于添加按钮的代码,它可能会有所帮助。
  • 另外,请参阅 setStretchMode 的另一个建议,我在遇到同样问题时就这样做了。
  • 所以基本上这就像硬编码宽度和高度??让我看看这个解决方案,然后再回复你。
  • 我已经编辑了问题中的代码。你能告诉我我做错了什么吗?还有,“56”是什么意思?顺便说一句 - 我尝试设置 MinHeight 和 MaxHeight。它似乎没有任何影响。如您所见,我将其设置为 1,仍然没有任何区别!
【解决方案2】:

正确的答案是将android:listSelector设置为@android:color/transparent,正如用户mvds所说的here

【讨论】:

    【解决方案3】:

    我使用了 Shawn 解决方案的变体。它在模拟器上看起来不错。

    1) 决定列数,我选择了 4

    2) 设置列宽

    float xdpi = this.getResources().getDisplayMetrics().xdpi;
    int mKeyHeight = (int) ( xdpi/4 );
    
    GridView gridView = (GridView) findViewById(R.id.gridview); 
    gridView.setColumnWidth( mKeyHeight );// same Height & Width
    

    3) 在适配器的 getView 方法中设置图像

    imageView = new ImageView( mContext );
    // (xdpi-4) is for internal padding
    imageView.setLayoutParams(new GridView.LayoutParams( (int) (xdpi-4)/2, (int) (xdpi-4)/2));
    imageView.setScaleType( ImageView.ScaleType.CENTER_CROP );
    imageView.setPadding(1, 1, 1, 1);
    

    4) 布局

    <?xml version="1.0" encoding="utf-8"?>
        <GridView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:id="@+id/gridview"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content"
        android:numColumns="4"
        android:verticalSpacing="0dp"
        android:horizontalSpacing="0dp"
        android:gravity="center"
        android:listSelector="@null"
    />
    <!-- 
        android:columnWidth="90dp"  Specified in code 
        android:stretchMode="columnWidth" no noticable change
    -->
    

    就是这样。

    【讨论】:

      【解决方案4】:

      即使我也遇到了同样的问题。 试试这个:

      image.setLayoutParams(new GridView.LayoutParams(imageWidth , imageHeight)); imageView.setScaleType(ImageView.ScaleType.FIT_XY);.

      为图像添加相应的填充。它对我有用。

      【讨论】:

        【解决方案5】:

        我遇到了类似的问题,但在我的情况下,GridView 的底部有一个相当大的填充区域(它被背景颜色填充)。
        我在这里没有看到我的问题的解决方案,所以我会在这里发布以防万一。

        除了设置:

        android:listSelector="@null"
        

        在我的 GridView 中,我还必须设置:

        android:fadingEdgeLength="0px"
        

        或者,在 Java 中:

        GridView.setFadingEdgeLength(0);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-06
          • 1970-01-01
          • 2017-09-18
          • 2015-10-24
          • 1970-01-01
          • 1970-01-01
          • 2011-07-27
          相关资源
          最近更新 更多