Fragment对于Listview未满一屏添加脚布局,满屏将View固定在屏幕下方的解决方案

来源:互联网 发布:巨人网络最新招聘信息 编辑:程序博客网 时间:2024/05/18 03:59
首先我们看两张效果图

第一张是当超过一屏幕时候的效果固定view

超过一屏幕


第二张是没超过一屏的时候添加的footerview

未满一屏幕添加的footerview


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


DisplayMetrics dm = new DisplayMetrics();        // 取得窗口属性        getActivity().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);    }


阅读全文
0 0
原创粉丝点击