对于Listview未满一屏添加footerView 满了一屏幕将View固定在屏幕下方的解决方案

来源:互联网 发布:simulink 知乎 编辑:程序博客网 时间:2024/05/20 19:29

首先我们看两张效果图
第一张是当超过一屏幕时候的效果固定view
超过一屏幕
第二张是没超过一屏的时候添加的footerview
未满一屏幕添加的footerview

具体实现思路就是获取当前屏幕高度并转换成dp在除以你每一个item项的高度
用得到的值(减一是为了最后一项不显示不完全导致出现的问题)去和你的数据集合做比较 当大于等于的时候就添加footerview否则就固定布局下面请看代码 当然我们也可以获取listview item的高度来实现
注 xml中的高度单位是dp 获取到的是px 所以要转换成dp 下面会附上方法
如果有标题要将标题高度减去才能得到最多显示的数量

DisplayMetrics dm = new DisplayMetrics();        // 取得窗口属性        getWindowManager().getDefaultDisplay().getMetrics(dm);        // 窗口的宽度        int screenWidth = dm.widthPixels;        // 窗口高度        int screenHeight = dm.heightPixels;        //获取listview的item的高度        View item=list.getAdapter().getView(0, null, list);        item.measure(0, 0);        System.out.println(item.getMeasuredHeight()+"");        //得到一屏幕上最多放的数据数量 如有标题请将标题高度减去        int count = px2dip(MainActivity.this, screenHeight) / px2dip(MainActivity.this, item.getMeasuredHeight());        System.out.println(count + "count");        if (count - 1 >= data.size()) {            findViewById(R.id.btn).setVisibility(View.GONE);            View views = LayoutInflater.from(MainActivity.this).inflate(                    R.layout.sitem, null);            list.addFooterView(views);        } else {            findViewById(R.id.btn).setVisibility(View.VISIBLE);        }

dp转px px 转dp

      /**      * 根据手机的分辨率从 dp 的单位 转成为 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);      }     /**     * 将px值转换为sp值,保证文字大小不变     *      * @param pxValue     * @param fontScale(DisplayMetrics类中属性scaledDensity)     * @return     */    public static int px2sp(float pxValue, float fontScale) {     return (int) (pxValue / fontScale + 0.5f);    }    /**     * 将sp值转换为px值,保证文字大小不变     *      * @param spValue     * @param fontScale(DisplayMetrics类中属性scaledDensity)     * @return     */    public static int sp2px(float spValue, float fontScale) {     return (int) (spValue * fontScale + 0.5f);    }

demo地址

http://download.csdn.net/detail/applicaton/9461209

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 老婆出轨老公想离婚又舍不得怎么办 孕妇打完无痛分娩针就想睡觉怎么办 熟食店开空调菜品吹的很干怎么办 不锈钢锅在液化气烧了发黄怎么办 在小镇门面卤菜店不好卖怎么办? 被辣椒辣到嘴唇了该怎么办 沁园净水机不制水指示灯不亮怎么办 太辣了辣得胃疼怎么办 出现连接问题或mmi码无效怎么办 存折丢了怎么办卡号也不记得了 车内皮子被烂苹果腐蚀有印怎么办 锅被腐蚀后变黑色应该怎么办 后厨炉灶里的炉芯进水了怎么办 小儿九个月老是流黄鼻子该怎么办 肉炖的老了不烂怎么办 吃了凉东西现在一直打嗝应该怎么办 喝了很多水还是觉得口渴怎么办 刚买的猪肝没洗直接炒了怎么办 四个多月的宝宝吃了脏东西怎么办 狗吃了脏东西拉稀呕吐怎么办 五个月宝宝怕吃药导致奶不喝怎么办 蒸锅锅盖吸住了怎么办锅比锅盖要大 豇豆没熟孕妇吃了中毒怎么办 孩子积食拉不出粑粑憋的直哭怎么办 2岁宝宝总是半夜拉粑粑怎么办 金毛拉很臭的稀粑粑怎么办 点餐系统登录后没有菜单怎么办? 环亚在线微交易亏了钱怎么办 钢管舞报了教练班觉得学不会怎么办 微信上聊天被外国人给骗了该怎么办 微信冒充朋友骗走我钱怎么办 凉皮调料水鸡精味精放多了怎么办 吃了地屈孕酮后月经不干不净怎么办 藕片用热水炒后变色了怎么办? 外汇延期收款忘了报告了怎么办 怀孕不小心吃了马生菜怎么办 高压锅的皮圈很容易坏是怎么办 华为应用市场账号密码忘记了怎么办 业主对我们提出批评意见时怎么办 向环保局投诉被公司发现了怎么办 在政务大厅上班被群众投诉怎么办