gridView和ListView一样都是一种列表显示的视图控件,ListView是竖直列表的形式来展现,常常用于新闻条目这种.而gridView是可以按照多少列来横向列表的形式来展现的.两者的使用十分相似.
在你的布局文件中创建gridView控件如下:
这里指定每列显示3个,同时使用权重来设置高度布局,设置layout_height为0dp来提高性能,verticalSpacing设置竖直间距20dp
创建gridView内部的每个Item的样式了,新建一个自定义的样式文件home_list_item.xml,写入item的布局,如下
一张图片和一个文字说明,标识一个功能Item的样式LinearLayout 中的android:gravity="center"是为了让item能居中显示
我们需要让Item样式动态展示到安卓设备上,需要写代码逻辑来实现,如下:
private String mItems[]= new String[]{"手机防盗", "通讯卫士", "软件管理", "进程管理",
"流量统计", "手机杀毒", "缓存清理", "高级工具", "设置中心"};
private int mPics[] = new int[]{ R.mipmap.home_safe,
R.mipmap.home_callmsgsafe, R.mipmap.home_apps,
R.mipmap.home_taskmanager, R.mipmap.home_netmanager,
R.mipmap.home_trojan, R.mipmap.home_sysoptimize,
R.mipmap.home_tools, R.mipmap.home_settings};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
gvHome = findViewById(R.id.gv_home);
gvHome.setAdapter(new HomeAdapter());
}
class HomeAdapter extends BaseAdapter{
@Override
public int getCount() {
return mItems.length;
}
@Override
public Object getItem(int position) {
return mItems[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = View.inflate(HomeActivity.this,R.layout.home_list_item,null);
ImageView iv_item = view.findViewById(R.id.iv_item);
TextView tv_item = view.findViewById(R.id.tv_item);
iv_item.setImageResource(mPics[position]);
tv_item.setText(mItems[position]);
return view;
}
}
mItems和mPics标识的是动态展示到设备上的文字和图片,在onCreate方法中,我们创建了HomeAdapter用来填充样式,其中以mItems作为实例,getCount获取mItems总数,getItem和getItemId分别标识当前position的Item和ItemId.重要的是getView,我们在该方法中给每个iv_item和tv_item附上对应的值,因为我们有九个item,所以该方法会调用九次.至此,我们了解了gridVIew的使用.
完成改功能需要singline和ellipsize两个属性,但是仅仅这两个属性还不行,我们需要他能获取焦点,代码如下:
除了刚刚说的两个参数,还有android:focusable="true",android:focusableInTouchMode="true"这两个要设置为true,当然你可以自定义View,在代码里面保证你的focus始终为true.