学习(一)自定义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点击事件和数据保存功能
- 学习(一)自定义GridView
- 自定义控件之GridView(一)创建自定义的GridView控件
- gridview显示数据每*(自定义)行显示一空行
- 自定义继承GridView,MeasureSpec学习
- 自定义控件学习(一)
- GridView技巧(一)
- GridView用法(一)
- gridview整理(一)
- Gridview(一)
- Android自定义控件(一) 下拉刷新,上拉分页加载更多(支持ListView, GridView, ScrollView)
- 自定义控件学习笔记(一)
- 自定义View学习摘要笔记(一)
- 自定义View学习一(圆形头像)
- 自定义View学习笔记(一)
- 自定义GridView
- 自定义gridview
- 自定义gridview
- 自定义GridView
- Ubuntu12.04安装配置MySQL开发环境
- 华为2014 so 板间最佳路径的权值 Dijkstra学习
- 澄清关于TUN/TAP的概念
- hdu 2079 选课时间(题目已修改,注意读题)
- 强风对高层钢框架结构的影响分析
- 学习(一)自定义GridView
- Lucene 分词原理
- Working With Code Snippets In Sublime Text
- poj 3399 Product(数学题)
- IT牛人博客
- 线程池原理和数据库连接池原理
- 最小公倍数 【杭电-HDOJ-1108】 附题+详解
- java深度搜索算法 深度优先搜索——java文件搜索
- php 用CAS实现SSO单点登陆及登出功能