Удаление дополнительного дополнения в GridView в Android
Я хочу удалить дополнительное дополнение, которое появляется в виде сетки. У меня есть изображения размером 128 * 128, которые будут занимать ячейки в сетке. Но почему-то есть дополнительное пространство, которое добавляется к содержимому сетки.
После некоторых исследований я смог определить, что мне нужно переопределить свойство listSelector вида сетки. Теперь вот мой вопрос - я знаю, что мне нужно указать что-то вроде xml drawable здесь, но что указать в этом??? Я пробовал использовать форму, которая была бы вырезана с заполнением и штрихом, равным 0dp, безрезультатно.
Вопрос задан и ответил здесь, но они не дали того, что должен содержать drawable.
Может кто-нибудь мне помочь. Спасибо!
EDIT: Ok - здесь экземпляр пользовательского интерфейса, который у меня есть. И 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;
}
}
Вы можете заметить ошибку?
Примечание: В конце концов, я закончил реализацию аналогичного экрана в макете таблицы, которая отображает гораздо лучшие сетки.
Ответы
Ответ 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);
}
}
Извините, что не дал точного ответа, поэтому дайте мне знать, если вам все еще нужна помощь после этого.
Ответ 2
Правильный ответ - установить android:listSelector
в @android:color/transparent
, как пользователь mvds сказал здесь.
Ответ 3
Я использовал вариацию решения Шона.. он выглядит хорошо на эмуляторе.
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);