GridView(网格布局)基本用法和根据item数量动态自适应显示高度,添加分割线,禁止滑动
2017-02-20 12:52
691 查看
属性:
这里写代码片 1.Android:numColumns=”auto_fit” //GridView的列数设置为自动 2.android:columnWidth=”90dp " //每列的宽度,也就是Item的宽度 3.android:stretchMode=”columnWidth"//缩放与列宽大小同步 4.android:verticalSpacing=”10dp” //两行之间的边距 5.android:horizontalSpacing=”10dp” //两列之间的边距 6.android:cacheColorHint="#00000000" //去除拖动时默认的黑色背景 7.android:listSelector="#00000000" //去除选中时的黄色底色 8.android:scrollbars="none" //隐藏GridView的滚动条 9.android:fadeScrollbars="true" //设置为true就可以实现滚动条的自动隐藏和显示 10.android:fastScrollEnabled="true" //GridView出现快速滚动的按钮(至少滚动4页才会显示) 11.android:fadingEdge="none" //GridView衰落(褪去)边缘颜色为空,缺省值是vertical。(可以理解为上下边缘的提示色) 12.android:fadingEdgeLength="10dip" //定义的衰落(褪去)边缘的长度 13.android:stackFromBottom="true" //设置为true时,你做好的列表就会显示你列表 4000 的最下面 14.android:transcriptMode="alwaysScroll" //当你动态添加数据时,列表将自动往下滚动最新的条目可以自动滚动到可视范围内 15.android:drawSelectorOnTop="false" //点击某条记录不放,颜色会在记录的后面成为背景色,内容的文字可见(缺省为false)
自定义布局样式layout:item_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"> <ImageView android:id="@+id/iv_img" android:src="@drawable/benz" android:layout_width="60dp" android:layout_height="60dp" android:layout_margin="10dp"/> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="奔驰" android:textSize="30sp" android:layout_marginLeft="10dp"/> </LinearLayout>
acvitity_gridview.xml设置GridView属性
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_grid_bar" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.example.jump.GridBarActivity"> <!--显示3列(auto_fit自己适应屏幕),垂直距离为30dp--> <GridView android:id="@+id/gv" android:numColumns="3" android:verticalSpacing="30dp" android:layout_width="match_parent" android:layout_height="wrap_content"> </GridView> </RelativeLayout>
GridViewAcvitity.Java
package com.example.jump; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.SimpleAdapter; import android.widget.Toast; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class GridBarActivity extends AppCompatActivity { private GridView gv; private String[] names = new String[]{"长安", "沃尔沃", "大众", "宾利", "奔驰"}; private int[] ids = new int[]{R.drawable.changan, R.drawable.vol, R.drawable.das, R.drawable.bl, R.drawable.benz}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_grid_bar); gv= (GridView) findViewById(R.id.gv); //adapter SimpleAdapter 自定义也可 intiGrid(); } private void intiGrid(){ //构建数据源 final List<Map<String,Object>> list =new ArrayList<>(); for (int i = 0; i <names.length ; i++) { Map<String,Object> map=new HashMap<>(); map.put("name",names[i]); map.put("img",ids[i]); list.add(map); } String[] from=new String[]{"name","img"}; int[] to=new int[]{R.id.tv_name, R.id.iv_img}; SimpleAdapter adapter=new SimpleAdapter(this,list,R.layout.item_gridview,from,to); gv.setAdapter(adapter); //添加点击事件 gv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(GridBarActivity.this,"点击"+list.get(position).get("name").toString(),Toast.LENGTH_SHORT).show(); } }); gv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(GridBarActivity.this,"长按"+list.get(position).get("name").toString(),Toast.LENGTH_SHORT).show(); return true;//不再返回上一次监听 } }); } }
动态自适应高度:
调用如下方法后,需要在调用notifyDataSetChanged()方法,实现界面刷新
public static void setListViewHeightBasedOnChildren(GridView listView) { // 获取listview的adapter ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } // 固定列宽,有多少列 int col = 4;// listView.getNumColumns(); int totalHeight = 0; // i每次加4,相当于listAdapter.getCount()小于等于4时 循环一次,计算一次item的高度, // listAdapter.getCount()小于等于8时计算两次高度相加 for (int i = 0; i < listAdapter.getCount(); i += col) { // 获取listview的每一个item View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); // 获取item的高度和 totalHeight += listItem.getMeasuredHeight(); } // 获取listview的布局参数 ViewGroup.LayoutParams params = listView.getLayoutParams(); // 设置高度 params.height = totalHeight; // 设置margin ((MarginLayoutParams) params).setMargins(10, 10, 10, 10); // 设置参数 listView.setLayoutParams(params); }
添加分割线,
1、在GridView的item布局中加入带有分割线颜色的imageview
2.用一个带有分割线背景的线性布局包裹GridView,利用
垂直间距
android:verticalSpacing=”1dp”
水平间距
android:horizontalSpacing=”1dp” 两个属性设置分割线
禁止滑动的方法,自定义GridView重写
dispatchTouchEvent(MotionEvent ev)方法
package com.ytf.gridviewapplication; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.widget.GridView; /** * Created by YTF on 2017/7/26. */ public class MyGridView extends GridView { public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { if(ev.getAction() == MotionEvent.ACTION_MOVE){ return true;//禁止Gridview进行滑动 } return super.dispatchTouchEvent(ev); } }
相关文章推荐
- Android GridView之添加分隔线,动态设置高度,实现高度自适应,并解决第一个item不显示的问题
- 固定列数,根据item数量动态设置GridView高度的方法
- ListView和GridView根据item数量自适应高度的工具类封装
- android实现界面左右滑动(GridView动态设置item,支持每个item按某个属性排序来显示在不同的界面)
- android实现界面左右滑动(GridView动态设置item,支持每个item按某个属性排序来显示在不同的界面)
- ListView中根据手机屏幕高度动态设置只显示一屏幕的item个数
- android实现界面左右滑动(GridView动态设置item,支持每个item按某个属性排序来显示在不同的界面)
- ListView中根据手机屏幕高度动态设置只显示一屏幕的item个数
- 网格布局的RecyclerView高度随Item自适应
- android实现界面左右滑动(GridView动态设置item,支持每个item按某个属性排序来显示在不同的界面)
- ## GridView 布局:item设置的高度和宽度不起作用、自动适配列数、添加Header和Footer ##
- 纯原生打造GridView单行横向滑动(宽度自适应在父布局居中),手机屏幕px和dp的互换方法,附禁止滑动的自定义方法
- 【Android疑难杂症】GridView动态设置Item的宽高导致第一个Item不响应或显示不正常的问题
- 解决GridView动态设置宽高导致第一个item点击不响应或显示不正常问题
- css样式的动态添加及显示和隐藏等零碎用法
- GridView动态设置Item的宽高 第一个Item不显示的问题
- Android 让GridView的高度为Wrap_content根据内容自适应高度
- DevExpress.XtraGrid.GridControl GridView 根据条件动态改变 RepositoryItemButtonEdit 的Caption
- SQLite数据库储存图片信息,GridView显示,基本实现添加、删除图标操作 ... ...
- Android-GridView添加网格分割线