Удаление лишних отступов в GridView в Android - PullRequest
15 голосов
/ 29 июля 2011

Я хочу удалить дополнительный отступ, который появляется в виде сетки.У меня есть изображения размером 128 * 128, которые будут занимать ячейки в сетке.Но почему-то есть дополнительное пространство, которое добавляется к содержимому сетки.

После некоторых исследований я смог определить, что мне нужно переопределить свойство listSelector вида сетки.Теперь вот мой вопрос - я знаю, что здесь нужно указать что-то вроде XML-файла, но что в этом указать?Я попытался использовать форму, которую можно нарисовать с отступом и обводкой, установленной на 0dp, но безрезультатно.

Вопрос задан и получен ответ здесь , но они не дали того, что должно содержать рисование.

Может кто-нибудь помочь мне с этим.Спасибо!

РЕДАКТИРОВАТЬ: ОК - здесь это копия интерфейса, который у меня есть.И 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;
}
 }

Можете ли вы обнаружить ошибку?

Примечание: В итоге я реализовал похожий экран в макете таблицы, который отображает многолучшие сетки.

Ответы [ 5 ]

37 голосов
/ 30 июля 2011

Да, у меня была такая же проблема. Вы хотите установить для 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);
    }
}

Извините, что не дал точного ответа, поэтому дайте мне знать, если вам все еще нужна помощь после этого.

2 голосов
/ 02 марта 2012

Правильный ответ - установить android:listSelector на @android:color/transparent, как пользователь mvds сказал здесь .

1 голос
/ 05 декабря 2014

Даже у меня была такая же проблема. Попробуйте это:

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

Добавьте отступы соответственно для изображений. Это сработало для меня.

1 голос
/ 28 ноября 2012

Я использовал вариант решения Шона ... это хорошо смотрится на Эмуляторе.

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
-->

Вот и все.

0 голосов
/ 19 сентября 2013

У меня была похожая проблема, хотя в моем случае была довольно большая область заполнения в нижней части моего GridView (она была заполнена цветом фона).
Я не видел решения моегоздесь, поэтому я опубликую это здесь на случай, если это будет полезно.

Помимо настройки:

android:listSelector="@null"

в моем GridView, я также должен был установить:

android:fadingEdgeLength="0px"

Илив Java:

GridView.setFadingEdgeLength(0);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...