2013-04-27 2 views
1

У меня есть gridview в Android, который заполнен пользовательским представлением, которое наследуется от кнопок изображения.Изменение размера ячеек в виде сетки?

Что я хотел бы сделать, это изменить размер кнопок изображения внутри gridview, а также их прописку между ячейками.

Вот мой код getView(). Я пробовал использовать макеты, но не могу, потому что у меня нет доступа к родительскому виду.

public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) context 
     .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (image == null) 
     image = BitmapFactory.decodeResource(context.getResources(), R.drawable.dollar); 

    ExpenseIcon ic = new ExpenseIcon(context); 
    ic.setImageBitmap(image); 

    return ic; 
} 

Как это сделать?

ответ

3

Вы можете установить с помощью setColumnWidth(int) или установить количество столбцов, позвонив по номеру setNumColumns(int) в зависимости от того, что вы пытаетесь выполнить. Кстати, вы также можете установить эти значения по xml (android:columnWidth и android:numColumns).

Для интервала вы можете использовать android:horizontalSpacing или setHorizontalSpacing(int) и android:verticalSpacing или setVerticalSpacing(int).

Для контролирования ВЫСО вам нужно изменить getView функцию:

public YourConstructor() { 
    // inflater should be a private member variable 
    inflater = (LayoutInflater)context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    // other code... 
} 

public View getView(int position, View convertView, ViewGroup parent) { 
    if(convertView == null) { 
     // create new one and put it into convertView. e.g.: 
     convertView = new ExpenseIcon(context); 
     AbsListView.LayoutParams lp = new AbsListView.LayoutParams(HEIGHT,WIDTH); 
     convertView.setLayoutParams(lp); 
    } 

    // set the image to the currient convertView. e.g.: 
    ((ExpenseIcon)convertView).setImageBitmap(image); 

    return convertView; 
} 
+0

что касается высоты? – tweetypi

+0

В вашем адаптере можно просто контролировать высоту. Я бы предложил сделать это в ['getView (...)'] (http://developer.android.com/reference/android/widget/Adapter.html#getView%28int,%20android.view.View, % 20android.view.ViewGroup% 29). Там вы можете установить высоту, переопределив параметры макета 'convertView'. – rekire

+0

Я пытался понять это там, но не смог это сделать, я обновил свой вопрос с помощью некоторого исходного кода ... – tweetypi

1

Создание XML-и inflate.I дал образец для использования в GetView ... Установить IMAGESIZE в макете ..

public View getView(int position, View convertView, ViewGroup parent) { 
       ViewHolder holder; 
    if (convertView == null) { 
       convertView = mInflater.inflate(R.layout.grid_item, null); 
       holder = new ViewHolder(); 
       holder.image = (ImageView) convertView.findViewById(R.id.grid_item_image); 
       convertView.setTag(holder); 
    }else { 
       holder = (ViewHolder) convertView.getTag(); 
    } 
       holder.image.setImageResource(list.get(position).getIconid()); 

       return convertView; 
} 

static class ViewHolder { 
       ImageView image; 
        } 
+0

Использование ViewViewholder всегда хорошая идея, но ваша реализация не использует ее. – rekire

Смежные вопросы