Android_GridView_GridView概述及實現水平滑動

1.GridView簡介

GridView是ViewGroup子類,主要用於顯示在一個二維可滾動的網格,比如九宮格。使用gridview和listview類似,都是使用ListAdapter來填充數據加載佈局。

2.XML Attributes

(1).android:columnWidth

主要用來指定每一列的寬度,使用該屬性時應該註意和後面的拉伸模式相關聯。如果拉伸模式為spacingWidth,則該屬性必須指定;如果拉伸模式為columnWidth指定該屬性無效。

(2).android:gravity

用於指定每個item的對其方式起始位置,當有多個是可以使用'|'隔開

(3).android:horizontalSpacing

用於指定每一列的之間的間距。註意:如果拉伸模式為spacingWidth,則該值設定無效

(4).android:numColumns

每一列的item數目

(5).android:verticalSpacing

用於指定每一行的之間的間距。

(6).android:stretchMode(***)

如果以列間距拉伸,則不需要指定列之間的間距;如果以列的等寬度拉伸,則不需要指定列的寬度。

常量 值 描述

none

0

拉伸被禁用,不可以被拉伸

spacingWidth

1

每一列之間的間距會被拉伸,因此使用該拉伸模式時,必須指定columnWidth,而指定horizontalSpacing就會無效,即不需要先考慮horizontalSpacing

columnWidth

2

每一列是等寬度,隻需要指定numColumns和horizontalSpacing,即先指定columnWidth就是無效的

spacingWidthUniform

3

每一列的間距均勻拉伸。拉伸被禁用,不可以被拉伸

3.GridView水平滾動

 

private GridView gridView;  
private float density;  
  
private int listSize = 10;  
  
@Override  
protected void onCreate(Bundle savedInstanceState) {  
    super.onCreate(savedInstanceState);  
    setContentView(R.layout.activity_main);  
  
    gridView = (GridView) findViewById(R.id.gridView1);  
    gridView.setAdapter(new MyAdapter());  
  
      
    // 得到像素密度  
    DisplayMetrics outMetrics = new DisplayMetrics();  
    getWindowManager().getDefaultDisplay().getMetrics(outMetrics);  
    density = outMetrics.density; // 像素密度  
  
    // 根據item的數目,動態設定gridview的寬度,現假定每個item的寬度和高度均為100dp,列間距為5dp  
    ViewGroup.LayoutParams params = gridView.getLayoutParams();  
    int itemWidth = (int) (100 * density);  
    int spacingWidth = (int) (5*density);  
      
    params.width = itemWidth*listSize+(listSize-1)*spacingWidth;  
    gridView.setStretchMode(GridView.NO_STRETCH); // 設置為禁止拉伸模式  
    gridView.setNumColumns(listSize);  
    gridView.setHorizontalSpacing(spacingWidth);  
    gridView.setColumnWidth(itemWidth);  
    gridView.setLayoutParams(params);  
  
    /* 
     * 使用這種方式也有很大的弊端,由於動態指定瞭gridview的寬度,導致瞭gridview的所有item,getView()都會被調用, 
     * 如果item很大時,就不能使用這種方式瞭~~~ 
     */  
    gridView.setOnItemClickListener(new OnItemClickListener() {  
        @Override  
        public void onItemClick(AdapterView<?> parent, View view,  
                int position, long id) {  
            System.out.println(position);  
        }  
    });  
}  

 

 

 

<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent" >  
  
    <HorizontalScrollView  
        android:layout_width="fill_parent"  
        android:layout_height="wrap_content"  
        android:scrollbars="none" >  
  
        <LinearLayout  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:orientation="horizontal" >  
  
            <GridView  
                android:id="@+id/gridView1"  
                android:layout_width="wrap_content"  
                android:layout_height="wrap_content" >  
            </GridView>  
        </LinearLayout>  
    </HorizontalScrollView>  
  
</RelativeLayout>  

 

 

 

<?xml version="1.0" encoding="utf-8"?>  
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    android:background="@android:color/holo_green_light"  
    android:gravity="center"  
    android:orientation="vertical" >  
  
    <ImageView  
        android:id="@+id/imageView1"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:src="@drawable/main_item_ad" />  
  
</LinearLayout>  

 

 

發佈留言