一、简介:
在Android开发中,GridView是一种灵活的布局控件,用于展示一组数据或图片。GridView可以在垂直或水平方向上显示多个项目,类似于网格状布局。
二、GridView中常用的一些属性:
android:numColumns=”auto_fit” //GridView的列数设置为自动
android:columnWidth=”90dp " //每列的宽度,也就是Item的宽度
android:stretchMode=”columnWidth"//缩放与列宽大小同步
android:verticalSpacing=”10dp” //两行之间的边距
android:horizontalSpacing=”10dp” //两列之间的边距
android:cacheColorHint="#00000000" //去除拖动时默认的黑色背景
android:listSelector="#00000000" //去除选中时的黄色底色
android:scrollbars="none" //隐藏GridView的滚动条
android:fadeScrollbars="true" //设置为true就可以实现滚动条的自动隐藏和显示
android:fastScrollEnabled="true" //GridView出现快速滚动的按钮(至少滚动4页才会显示)
android:fadingEdge="none" //GridView衰落(褪去)边缘颜色为空,缺省值是vertical。(可以理解为上下边缘的提示色)
android:fadingEdgeLength="10dip" //定义的衰落(褪去)边缘的长度
android:stackFromBottom="true" //设置为true时,你做好的列表就会显示你列表的最下面
android:transcriptMode="alwaysScroll" //当你动态添加数据时,列表将自动往下滚动最新的条目可以自动滚动到可视范围内
android:drawSelectorOnTop="false" //点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)
三、使用方法:
GridView的使用方法和ListView类似。在使用GridView时,通常需要自定义Adapter来填充数据。Adapter是连接数据和GridView之间的桥梁,负责将数据转换为视图展示给用户。在Adapter中需要重写getView()方法来设置每个item的视图。
GrideView实例:
image.png
public class MyGridActivity extends AppCompatActivity {
GridView gridView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] arr = {"菠萝","芒果","石榴","葡萄"};
setContentView(R.layout.my_gride);
gridView = findViewById(R.id.my_gride_view);
// 设置列数
gridView.setNumColumns(3);
//自定义BaseAdapter适配器
MyAdapter adapter = new MyAdapter(this,R.layout.my_gride_item,list);
gridView.setAdapter(adapter);
gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MyGridActivity.this, arr[position], Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected void onStart() {
super.onStart();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
创建GridView的xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<GridView
android:id="@+id/my_gride_view"
android:horizontalSpacing="10dp"
android:verticalSpacing="10dp"
android:layout_width="match_parent"
android:layout_height="match_parent">
</GridView>
</LinearLayout>
创建item的xml文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_centerInParent="true"
android:layout_centerHorizontal="true"
/>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/img"
android:layout_centerHorizontal="true"
android:layout_marginTop="30dp"
android:textSize="18sp"
/>
</RelativeLayout>
自定义MyAdapter
public class MyAdapter extends BaseAdapter {
private Context mContext;
private List<Map<String, String>> mList;
private int mViewId;
public MyAdapter(Context context,int viewId,List<Map<String, String>>list) {
this.mContext = context;
this.mList = list;
this.mViewId = viewId;
}
@Override
public int getCount() {
return mList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if(convertView == null) {
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(mContext).inflate(mViewId, null);
viewHolder.nameTX = convertView.findViewById(R.id.name);
viewHolder.imageV = convertView.findViewById(R.id.img);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.nameTX.setText(mList.get(position).get("name"));
viewHolder.imageV.setImageResource(Integer.parseInt(mList.get(position).get("img")));
return convertView;
}
class ViewHolder {
private TextView nameTX;
private ImageView imageV;
}
}