android gridview文本框,Android中GridView通过自定义适配器(未优化)实现图文视图排列...

本文详细介绍了如何在Android应用中使用GridView组件创建网格布局,包括布局文件设置、numColumns、columnWidth、stretchMode等属性配置,以及自定义适配器的实现,附带关键代码实例。
摘要由CSDN通过智能技术生成

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

87e5f1c444739fa77dc2e9caf00ec98f.gif)

c9cfd74ef13ecaf1166f43bbba595e9c.gif

Layout下gridview.xml布局文件:

android:orientation="vertical" android:layout_width="match_parent"

android:layout_height="match_parent">

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属性设置解析:

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

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

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

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

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

Layout下item_layout.xml布局文件(即为网格内每个单元格的布局):

android:layout_width="match_parent"

android:layout_height="match_parent"

android:gravity="center"(此处设置gravity为center后便不需要在他处重复设置)

android:orientation="vertical">

android:id="@+id/iv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:scaleType="centerCrop"

android:src="@mipmap/ic_launcher" />

android:id="@+id/tv"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="功能" (测试使用此处文本框内的文本设置可不添加)/>

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;

}

}

}

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

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值