现在的位置: 首页 > 操作系统 > 正文

Android中GridView通过自定义适配器(未优化)实现图文视图排列

2020年02月12日 操作系统 ⁄ 共 3285字 ⁄ 字号 评论关闭

Android中GridView组件用来以网格方式排列视图,与矩阵类似,当屏幕上有很多元素(文字、图片或其他元素)需要显示时,可以使用该组件。下面我们通过代码实现如下图例(为了方便截图,将事件处理(土司)设置到屏幕顶部)

Layout下gridview.xml布局文件:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <GridView android:id="@+id/gv" android:layout_width="match_parent" android:layout_height="match_parent" android:numColumns="3" android:columnWidth="90dp" android:stretchMode="columnWidth" android:verticalSpacing="10dp" android:horizontalSpacing="10dp"> </GridView></LinearLayout>

GridView属性设置解析:

anroid:numColumns="3"GridView的列数设置为3

android:columnWidth="90dp",每列的宽度,也就是Item的宽度

android:stretMode="columnWidth" 缩放与列宽大小同步

android:verticalSpacing="10dp" 两行之间的边距

android:horizontalSpacing="10dp" 两列之间的边距

Layout下item_layout.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" android:gravity="center"(此处设置gravity为center后便不需要在他处重复设置) android:orientation="vertical"> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="centerCrop" android:src="@mipmap/ic_launcher" /> <TextView android:id="@+id/tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="功能" (测试使用此处文本框内的文本设置可不添加)/></LinearLayout>

java代码实现功能(核心为自定义适配器):

public class GridViewDemo extends AppCompatActivity { private GridView gv;//声明GridView视图 @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gridview); gv = (GridView) findViewById(R.id.gv); gv.setAdapter(new MyAdapter(this));//通过设置适配器实现网格内布局 //为每个单元格(item)添加单击事件 gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TextView tv = (TextView) view.findViewById(R.id.tv); Toast t =Toast.makeText(GridViewDemo.this,tv.getText().toString(),Toast.LENGTH_SHORT); t.setGravity(Gravity.TOP,0,0); t.show(); } }); } //自定义适配器(通过继承BaseAdapter) class MyAdapter extends BaseAdapter { Context context;//声明适配器中引用的上下文 //将需要引用的图片和文字分别封装成数组 int[] images = {R.mipmap.ic_launcher, R.mipmap. ic_launcher, R.mipmap.ic_launcher, R.mipmap. ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher,}; String[] names = {"功能1", "功能2", "功能3", "功能4", "功能5", "功能6"}; //通过构造方法初始化上下文 public MyAdapter(Context context) { this.context = context; } @Override public int getCount() { return names.length;//images也可以 } @Override public Object getItem(int position) { return names[position];//images也可以 } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { //通过布局填充器LayoutInflater填充网格单元格内的布局 View v = LayoutInflater.from(context).inflate(R.layout.item_layout, null); //使用findViewById分别找到单元格内布局的图片以及文字 ImageView iv = (ImageView) v.findViewById(R.id.iv); TextView tv = (TextView) v.findViewById(R.id.tv); //引用数组内元素设置布局内图片以及文字的内容 iv.setImageResource(images[position]); tv.setText(names[position]); //返回值一定为单元格整体布局v return v; } }}

至此代码全部完成,为了实现功能本次未对图片以及文本样式做精细化处理,感兴趣的朋友们可以自己试着敲着玩玩。

本文永久更新链接地址:http://www.xuebuyuan.com/Linux/2016-12/138652.htm

以上就上有关Android中GridView通过自定义适配器(未优化)实现图文视图排列的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.