2011-02-07 13 views
5

Mam 3 kolumny GridView i 4 przedmioty.Dzieci w centrum w GridView

Tak się składa, że ​​trzy z nich pojawiają się w pierwszym rzędzie, a ostatnie w drugim rzędzie, ale ten wyrównany w lewo. Chciałem tylko wiedzieć, czy jest możliwe, aby wyglądało na wyśrodkowane w GridView. Niczym 'T', ja nie wiem, czy mogę wyjaśnić ... xD

Dziękuję :-)

Edit:

Jest to układ, który zawiera GridView

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/section_title_root" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@drawable/bg_gd_home_grid"> 
    <ImageView 
    android:src="@drawable/home_grid_txori" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="40dip" 
    android:layout_centerHorizontal="true"/> 
    <GridView 
     android:id="@+id/home_grid" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:numColumns="3" 
     android:drawSelectorOnTop="true" 
     android:layout_marginBottom="30dip" 
     android:layout_marginLeft="30dip" 
     android:layout_marginRight="30dip" 
     android:padding="5dip" 
     android:listSelector="@android:color/transparent" 
     android:background="@drawable/bg_home_grid_item" 
/> 
</RelativeLayout> 

Nawiasem mówiąc, android:layout_centerHorizontal="true" nie działa w GridView

Rozwiązanie Edit:

Ten problem jest z minionych lat, ale już został poproszony, aby opublikować rozwiązanie i musiałem znaleźć mojego starego repo, aby ją :-)

Jak powiedziałem poniżej w komentarzach, Nie udało mi się tego osiągnąć tylko za pomocą XML, więc musiałem oszukać fałszywy nieklikalny element + nieogniskowany na trzeciej pozycji.

To była moja pierwsza aplikacja, więc nie wdrożyłem zalecanego rozwiązania "ViewHolder". Gorąco polecam jego użycie

ten sposób metoda moja getView() wygląda w adapterze:

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

     if (convertView == null) { 

      convertView = (RelativeLayout) mInflater.inflate(
        R.layout.home_grid_item, null); 

     } 

     /* In order to have 4th item centered in the 2nd row, we create an empty 3rd item */ 
     if (position == 3) { 
      convertView.setFocusable(false); 
      convertView.setClickable(false); 
     } else { 
      ImageView imageView = (ImageView) convertView 
        .findViewById(R.id.image); 
      imageView.setImageResource(mThumbs[position]); 
      TextView textView = (TextView) convertView.findViewById(R.id.title); 
      textView.setText(mTitles[position]); 

     } 

     convertView.setTag(mTabTags[position]); 

     return convertView; 
    } 

Odpowiedz

1

Można spróbować następujący kod:

android:gravity="center_horizontal" 

w xml.

+0

To nie działa ... dzięki! –

+0

czy możesz opublikować swój xml? – Herter

+0

spróbuj rozejrzeć się tutaj .. http://developer.android.com/reference/android/widget/GridView.html#attr_android:gravity – Herter

0

Oto jak rozwiązałem ten problem. Ustawiam dynamicznie numcolumn, kiedy dokładnie znam kolumnę.

<GridView 
     android:id="@+id/gr_single" 
     android:verticalSpacing="@dimen/pay_mode_icon_margin" 
     android:horizontalSpacing="@dimen/pay_mode_icon_margin" 
     android:columnWidth="@dimen/pay_icon_width" 
     android:gravity="center" 
     android:stretchMode="columnWidth" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"/> 

W języku Java.

mGridView.setNumColumns(mSingleImageViews.size()); 
mGridView.setAdapter(new ImageAdapter());