2013-05-29 27 views
10

GridView'de satır yüksekliği ile ilgili her türlü sorun yaşıyorum.Sabit GridView Satır Yüksekliğini Ayarla

XML'deki öğelerin boyutunu (yükseklik/genişlik) ayarlamak ve daha sonra GridView otomatik uyumluluğuna sahip olduğundan çok fazla sayıda gerdirme yapmadan sahip olmak istiyorum. Bir sonraki öğeye sığamazsa, sığabilecekleri öğelerin sayısı etrafında dolgu eklemelidir.

Şu anda 2 sütun (neredeyse sabit boyutta görünüyor) alıyorum ve satırlar geriliyor. Birisi neler olduğunu ve ne istediğimi nasıl elde edeceğimi açıklamaya yardımcı olabilir mi?

GridView:

<?xml version="1.0" encoding="utf-8"?> 
<GridView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/main_grid" 
    android:numColumns="auto_fit" 
    android:gravity="center" 
    android:paddingRight="20dp" 
    android:paddingLeft="20dp" 
    android:clipToPadding="true" 
    android:fitsSystemWindows="true" 
    android:stretchMode="none" 
    android:background="@drawable/main_grid_background"> 

</GridView> 

GridItem (Ben 320x320 Daha sonra onun değil mükemmel bir meydanda eğer tuhaf görünüyor ki bunun içine bir arka plan resmi eklemek olarak istiyorum).

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="320dp" 
    android:layout_height="320dp" 
    android:padding="10dp" > 

    <TextView 
     android:id="@+id/grid_item_label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:singleLine="true" 
     android:text="@+id/label" 
     android:layout_marginTop="5dp" 
     android:textColor="@color/black" 
     android:textSize="15sp" 
     android:visibility="invisible" 
     android:layout_centerInParent="true" > 
    </TextView> 

</RelativeLayout> 

Java:

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

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

     View gridView; 

     if (convertView == null) { 

      gridView = new View(context); 

      // get layout from mobile.xml 
      gridView = inflater.inflate(R.layout.main_grid_item, null); 

     } else { 
      gridView = (View) convertView; 
     } 
     TextView textView = (TextView) gridView 
       .findViewById(R.id.grid_item_label); 

      //SET TEXT AND BACKGROUND IMAGE HERE 
      //gridView.setBackgroundResource(R.drawable.main_grid_item_import); 



     return gridView; 
    } 
+0

mümkünse –

+0

@MehulJoisar detaylar için resimlere bakınız gergin satırların ekran gönderin. – AlexIIP

+0

'android: stretchMode =" spacingWidthUniform "' istediğin şey değil mi? –

cevap

1

Yani, bu mükemmel bir cevap değil ama bu işe lazım nasıl. Fikirler this numaradan ödünç alınmıştır.

Tüm bu görüntüler, 320x320 boyutlarındaki resim boyutlarını bildiğimi varsayıyor. Ayrıca, GridView'da android:columnWidth="320dp"'u ayarlamak zorunda kaldım ya da işe yaramayacaktı. Birisi daha iyi bir fikri varsa lütfen gönderin ... şimdilik hareket ediyorum.

Izgara Ürün XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:padding="10dp" > 
    <ImageView 
    android:id="@+id/grid_item_image" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true"/> 
    <TextView 
     android:id="@+id/grid_item_label" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:singleLine="true" 
     android:text="@+id/label" 
     android:textColor="@color/black" 
     android:layout_alignLeft="@+id/grid_item_image" 
     android:layout_alignTop="@+id/grid_item_image" 
     android:layout_alignRight="@+id/grid_item_image" 
     android:layout_alignBottom="@+id/grid_item_image" 
     android:gravity="center" 
     android:textSize="15sp" 
     android:visibility="invisible"> 
    </TextView> 

</RelativeLayout> 

GridView XML: CustomAdapter

v.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, rowHigh)); 

rowHigh yılında

<GridView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/main_grid" 
    android:numColumns="auto_fit" 
    android:gravity="center" 
    android:columnWidth="320dp" 
    android:paddingRight="20dp" 
    android:paddingLeft="20dp" 
    android:clipToPadding="true" 
    android:fitsSystemWindows="true" 
    android:stretchMode="columnWidth" 
    android:background="@drawable/main_grid_background"> 
</GridView> 
42

boyuttur değiştirmek gerekir

+1

Bunun için teşekkürler. Uygulamaya bağlı olarak, v nihai (nihai) veya eşdeğer ViewHolder nesnesini final olarak aldıktan sonra bunu v.post (yeni Runnable ...) içinde aramak isteyebilirsiniz. Kendimi (list.remove (position)) kaldırır ve notifyDataSetChanged() çağırır bir hücrede 'close' düğmesine sahip. Sadece düz setLayoutParams bana göre hareket etti (zamanlama karışıklık yarattı) ve post'a yerleştirdi. –

+1

Özellikle, inView() veya newView() inanıyorum. Dokümantasyondaki örneğe bakın: http://developer.android.com/guide/topics/ui/layout/gridview.html#example –

4
public class MyGridView extends GridView { 
    public MyGridView(Context context) { 
     super(context); 
    } 

    public MyGridView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MyGridView(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int heightSpec; 

     if (getLayoutParams().height == LayoutParams.WRAP_CONTENT) { 
      // The great Android "hackatlon", the love, the magic. 
      // The two leftmost bits in the height measure spec have 
      // a special meaning, hence we can't use them to describe height. 
      heightSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,MeasureSpec.AT_MOST); 
     } else { 
      heightSpec = heightMeasureSpec; 
     } 

     super.onMeasure(widthMeasureSpec, heightSpec); 
    } 


} 
XML'de

:

<MyGridView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/main_grid" 
    android:gravity="center"/> 
+0

http://www.jayway.com/2012/10/04/how-to adresinden alınmıştır. Ayrıntılar-yüksekliği-a-GRIDVIEW-sarma-onun içeriğinin / –