学习(一)自定义GridView

来源:互联网 发布:剑灵李小龙捏脸数据 编辑:程序博客网 时间:2024/06/05 03:29

GridView和ListView是比较常用的多控件布局,而GridView更是实现九宫格的首选. 本文主要介绍如何使用GridView进行布局,以及使用BaseAdapter为GridView提供数据支持!


先贴一张本文代码运行结果:


下面贴出实现步骤代码:

步骤一:先实现自定义GridView

public class MyGridViewextends GridView {


public MyGridView(Context context) {

super(context);

// TODO Auto-generated constructor stub

}


public MyGridView(Context context, AttributeSet attrs) {

super(context, attrs);

// TODO Auto-generated constructor stub

}


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

super(context, attrs, defStyle);

// TODO Auto-generated constructor stub

}


@Override

protectedvoid onMeasure(int widthMeasureSpec,int heightMeasureSpec) {

// TODO Auto-generated method stub

int expandSpec = MeasureSpec.makeMeasureSpec( 

                Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);

super.onMeasure(widthMeasureSpec, expandSpec);

}


}


步骤二:再实现GridView布局文件和GridViewItem布局文件

<?xmlversion="1.0"encoding="utf-8"?>

<com.ifdoo.wislearn.view.MyGridViewxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:id="@+id/mygridview"

    android:columnWidth="90dp"

    android:numColumns="4"

    android:verticalSpacing="1dp"

    android:horizontalSpacing="1dp"

    android:stretchMode="columnWidth"

    android:gravity="center" 

    android:listSelector="@color/yellow">

 </com.ifdoo.wislearn.view.MyGridView>


<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical" 

    android:id="@+id/mygridviewitem"

    android:layout_marginTop="5dp">

    

    <TextView 

        android:id="@+id/title"

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:layout_gravity="center"

        android:gravity="center_horizontal"

        android:textSize="20dp"

        />


</LinearLayout>


步骤三:接下来是GridViewAdapter文件

public class MyGridViewAdapterextends BaseAdapter {


private LayoutInflaterinflater;

private List<GridViewItem>gridViewItems;

privateint clickItem = 0;

public void setSelectionItem( int position )

{

clickItem = position;

}

public GridViewItem getSelectionItem()

{

returngridViewItems.get(clickItem);

}

public MyGridViewAdapter(String[] titles, Context context) {

// TODO Auto-generated constructor stub

super();

inflater = LayoutInflater.from(context);

gridViewItems =new ArrayList<MyGridViewAdapter.GridViewItem>();

for(int i = 0; i < titles.length; i++)

{

GridViewItem item = new GridViewItem(titles[i]);

gridViewItems.add(item);

}

}


@Override

public int getCount() {

// TODO Auto-generated method stub

return (null ==gridViewItems)?0:gridViewItems.size();

}


@Override

public Object getItem(int arg0) {

// TODO Auto-generated method stub

return gridViewItems.get(arg0);

}


@Override

public long getItemId(int arg0) {

// TODO Auto-generated method stub

return arg0;

}


@Override

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

// TODO Auto-generated method stub

ViewHolder viewHolder;

if( convertView ==null )

{

convertView = inflater.inflate(R.layout.mygridviewitem,null);

viewHolder = new ViewHolder();

viewHolder.title = (TextView)convertView.findViewById(R.id.title);

convertView.setTag(viewHolder);

}

else{

viewHolder = (ViewHolder)convertView.getTag();

}

viewHolder.title.setText(gridViewItems.get(position).getTitle());

if( clickItem == position )

{

// viewHolder.title.setBackgroundColor(Color.RED);

convertView.setBackgroundColor(Color.YELLOW);

}

else

{

// viewHolder.title.setBackgroundColor(Color.TRANSPARENT);

convertView.setBackgroundColor(Color.TRANSPARENT);

}

return convertView;

}

class ViewHolder

{

public TextViewtitle;

}

public class GridViewItem{

private Stringtitle;

public GridViewItem()

{

super();

}

public GridViewItem(String aTitle)

{

super();

this.title = aTitle;

}

public String getTitle() {

returntitle;

}

public void setTitle(String aTitle) {

this.title = aTitle;

}

}


}



步骤四:准备工作已做完,接下来我们进入GridView使用阶段,先贴出使用GridView的布局文件

<?xmlversion="1.0"encoding="utf-8"?>

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="vertical">

    

    

    <include

        layout="@layout/title"/>

    

    <ScrollView

        android:layout_width="fill_parent"

    android:layout_height="fill_parent" 

    android:background="#ffffff"

       android:fillViewport="true"

android:scrollbars="vertical">

        

        

        <LinearLayout

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:background="#ffffff"

        android:orientation="vertical">

        


        <!-- 年级 -->

        <TextView

                android:id="@+id/textview_grade"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_gravity="center"

                android:layout_marginTop="10dp"

                android:text="年级"

                android:textColor="#000000"

                android:textSize="40dp"/>


            <include

                android:id="@+id/grade_grid"

                layout="@layout/mygridview"/>


            <!-- 分割线 -->


            <View

                android:layout_width="fill_parent"

                android:layout_height="1px"

                android:layout_marginTop="10dp"

                android:background="#000000"/>


            <!-- 学科 -->


            <TextView

                android:id="@+id/textview_subject"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_gravity="center"

                android:layout_marginTop="10dp"

                android:text="学科"

                android:textColor="#000000"

                android:textSize="40dp"/>


            <include

                android:id="@+id/subject_grid"

                layout="@layout/mygridview"/>


            <!-- 分割线 -->


            <View

                android:layout_width="fill_parent"

                android:layout_height="1px"

                android:layout_marginTop="10dp"

                android:background="#000000"/>


            <!-- 版本 -->


            <TextView

                android:id="@+id/textview_Publication"

                android:layout_width="wrap_content"

                android:layout_height="wrap_content"

                android:layout_gravity="center"

                android:layout_marginTop="10dp"

                android:text="教材"

                android:textColor="#000000"

                android:textSize="40dp"/>


            <include

                android:id="@+id/publication_grid"

                layout="@layout/mygridview"/>

    

    </LinearLayout>

        

    </ScrollView>


</LinearLayout>


步骤五:还是直接贴码

public class SubjectAndTextBookActivityextends BaseActivity implements

OnItemClickListener {


private TextViewtitle;

private ImageViewmoreImageView;

private MyGridViewAdaptergradeAdapter;

private MyGridViewAdaptersubjectAdapter;

private MyGridViewAdapterpublicationAdapter;

private MyGridViewgridView_grade;

private MyGridViewgridView_subject;

private MyGridViewgridView_publication;

private StringgrideString;

private StringsubjectString;

private StringpublicationString;

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_subject_and_booktext);

title = (TextView) findViewById(R.id.title);

title.setText("请选择:年级、学科、教材");

moreImageView = (ImageView)findViewById(R.id.more);

moreImageView.setVisibility(TRIM_MEMORY_UI_HIDDEN);

gridView_grade = (MyGridView)findViewById(R.id.grade_grid);

gridView_subject = (MyGridView)findViewById(R.id.subject_grid);

gridView_publication = (MyGridView)findViewById(R.id.publication_grid);

gradeAdapter =new MyGridViewAdapter(getResources().getStringArray(R.array.nianji),this);

subjectAdapter =new MyGridViewAdapter(getResources().getStringArray(R.array.subject),this);

publicationAdapter =new MyGridViewAdapter(getResources().getStringArray(R.array.publication),this);

gridView_grade.setAdapter(gradeAdapter);

gridView_subject.setAdapter(subjectAdapter);

gridView_publication.setAdapter(publicationAdapter);

gridView_grade.setOnItemClickListener(this);

gridView_subject.setOnItemClickListener(this);

gridView_publication.setOnItemClickListener(this);

}


@Override

public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {

// TODO Auto-generated method stub

switch (arg0.getId()) {

case R.id.grade_grid:

// showToast("点击了gradeView");

gradeAdapter.setSelectionItem(arg2);

gradeAdapter.notifyDataSetChanged();

grideString =gradeAdapter.getSelectionItem().getTitle();

break;

case R.id.subject_grid:

// showToast("点击了subjectView");

subjectAdapter.setSelectionItem(arg2);

subjectAdapter.notifyDataSetChanged();

subjectString =subjectAdapter.getSelectionItem().getTitle();

break;

case R.id.publication_grid:

// showToast("点击了pbulicationView");

publicationAdapter.setSelectionItem(arg2);

publicationAdapter.notifyDataSetChanged();

publicationString =publicationAdapter.getSelectionItem().getTitle();

break;


default:

break;

}

}


@Override

public void back(View view) {

// TODO Auto-generated method stub

super.back(view);

}


@Override

public void refresh(Object... param) {

// TODO Auto-generated method stub

super.refresh(param);

}


}


到此打完收工,哈哈,虽然简陋,但是自定义GridView基本实现,后续添加GridViewItem点击事件和数据保存功能





0 0
原创粉丝点击