纯原生打造GridView单行横向滑动(宽度自适应在父布局居中),手机屏幕px和dp的互换方法,附禁止滑动的自定义方法
2017-08-11 11:09
489 查看
布局文件:
HorizontalScrollView包裹LinearLayout(只能包裹这个),放入GridView,先实现横向滑动
Java代码将GridView改成单行横向布局的工具类方法
只需要传入要改变的GridView对象和item的宽度即可实现
上文中的DensityUtil也是一个封装的方法,用来实现手机屏幕像素px和安卓开发的虚高和虚宽的相互转换,代码如下:
经过以上方法设置就可以实现GridView自适应宽度并且在父布局居中显示,
当item的总宽小于屏幕宽度时居中显示不滑动,
当item的总宽大于屏幕宽度时根据传入的item宽度计算总宽度,实现单行横向滑动
附:GridView禁止滑动的自定义方式:
GridView默认是竖直滑动,有时候只有一行也会滑动一点,为了显示效果简介需要禁止滑动,自定义GridView重写 dispatchTouchEvent方法,截取滑动事件:
HorizontalScrollView包裹LinearLayout(只能包裹这个),放入GridView,先实现横向滑动
<HorizontalScrollView android:fillViewport="true" android:layout_width="match_parent" android:layout_height="85dp" android:scrollbars="none" android:layout_gravity="center_horizontal" android:background="@android:color/white"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal"> <GridView android:id="@+id/gv_tequan" android:layout_width="wrap_content" android:layout_height="match_parent" android:cacheColorHint="#00000000" android:scrollbars="none" an 4000 droid:layout_gravity="center_horizontal" android:listSelector="#00000000"></GridView> </LinearLayout> <!--@color/title_bg_color android:scrollbars="horizontal"--> </HorizontalScrollView>
Java代码将GridView改成单行横向布局的工具类方法
只需要传入要改变的GridView对象和item的宽度即可实现
private void changeGridView(GridView mContentGv) { LinearLayout.LayoutParams params=null; int with=this.getWindowManager().getDefaultDisplay().getWidth();//获取手机屏幕宽度px int withdip=DensityUtil.px2dip(this,with);//dip int size = img_tequan.length; // item宽度Gridview宽度在这里动态设置的 int shang=(int) withdip/80; int itemWidth = DensityUtil.dip2px(this, 80); int totalWidth=0; if (shang>size){//item数量小于可以显示的最大容量 // itemWidth =DensityUtil.px2dip(this, (int)withdip/(size)); // totalWidth=DensityUtil.px2dip(this, itemWidth*size); totalWidth= itemWidth*size; mContentGv.setGravity(Gravity.CENTER_HORIZONTAL); }else if(shang<=size) { // itemWidth=DensityUtil.px2dip(this, 85); totalWidth=itemWidth*size+size; } // item之间的间隔 // int itemPaddingH = DensityUtil.dip2px(this, 1); // 计算GridView宽度 size * (itemWidth + itemPaddingH) int gridviewWidth = totalWidth; params = new LinearLayout.LayoutParams( gridviewWidth, LinearLayout.LayoutParams.MATCH_PARENT); mContentGv.setLayoutParams(params); mContentGv.setColumnWidth(itemWidth); // mContentGv.setHorizontalSpacing(itemPaddingH); mContentGv.setStretchMode(GridView.NO_STRETCH); mContentGv.setNumColumns(size); }
上文中的DensityUtil也是一个封装的方法,用来实现手机屏幕像素px和安卓开发的虚高和虚宽的相互转换,代码如下:
public class DensityUtil { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) * * @param context 上下文 * @param dpValue dp值 * @return px值 */ public static int dip2px(Context context, float dpValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (dpValue * scale + 0.5f); } /** * * 根据手机的分辨率从 px(像素) 的单位 转成为 dp * */ public static int px2dip(Context context, float pxValue) { final float scale = context.getResources().getDisplayMetrics().density; return (int) (pxValue / scale + 0.5f); } }
经过以上方法设置就可以实现GridView自适应宽度并且在父布局居中显示,
当item的总宽小于屏幕宽度时居中显示不滑动,
当item的总宽大于屏幕宽度时根据传入的item宽度计算总宽度,实现单行横向滑动
附:GridView禁止滑动的自定义方式:
GridView默认是竖直滑动,有时候只有一行也会滑动一点,为了显示效果简介需要禁止滑动,自定义GridView重写 dispatchTouchEvent方法,截取滑动事件:
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); }
相关文章推荐
- 使用viewGrop自定义轮播图中实现图片自适应手机屏幕的宽度
- 横向RecyclerView item修改宽度,均分Android手机屏幕的方法
- Android之根据手机屏幕分辨率(px与dp互换)
- 自适应屏幕宽度的居中布局
- 安卓工具类1——像素PX和dp互相转换的方法(获取手机屏幕尺寸PX)
- 手机网页宽度自适应屏幕宽度的方法
- 手机滑屏tab菜单自适应高度,菜单内容级联滑动(tab超过屏幕宽度可自动滑动)
- android -- 模块 android手机旋转屏幕时让GridView的列数与列宽度自适应
- Android 获取屏幕宽度,dp,sp,px转换方法
- android手机旋转屏幕时让GridView的列数与列宽度自适应
- Android网页宽度自适应手机屏幕宽度的方法
- GridView(网格布局)基本用法和根据item数量动态自适应显示高度,添加分割线,禁止滑动
- 在xml布局文件中,我们既可以设置px,也可以设置dp(或者dip)。一般情况下,我们都会选择使用dp,这样可以保证不同屏幕分辨率的机器上布局一致。但是在代码中,如何处理呢?很多控件的方法中都只提供了
- 网页宽度自动适应手机屏幕宽度的方法
- 网页宽度自动适应手机屏幕宽度的方法
- 移动页面自适应手机屏幕宽度
- CSS-左侧固定宽度,右侧自适应宽度的两列布局实现方法总结
- 网页宽度自动适应手机屏幕宽度的方法
- 一种颇为取巧,但同时兼容ie和firefox的,防止table被撑大的,并且自适应屏幕宽度的方法
- 怎么让手机网站自适应设备屏幕宽度?