ListView中根据手机屏幕高度动态设置只显示一屏幕的item个数

本文介绍了一种根据屏幕高度动态调整ListView中数据加载量的方法,以提高滚动性能并优化用户交互体验。通过获取屏幕高度、状态栏和标题栏的高度,计算实际可用空间,并据此计算出合适的数据加载量。这种方法适用于需要根据设备特性动态调整UI组件行为的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 获得 android 状态栏、标题栏、屏幕高度


2. 根据屏幕高度动态调整一次拉取的数据个数
    private int getMaxNum() {
        int ret = 0;
        int screenHeight = AndroidConfig.getScreenHeight(); // 获得屏幕高度
        int statusBarHeight = AndroidConfig.getTopBarHeight(this); // 获得屏幕标题栏和状态栏高度的和

        // 根据xml布局中,把ListView中的item高度从dip转化为px
        int itemHeight = DipPixelUtil.dip2px(this, 80) + DipPixelUtil.dip2px(this, 1);
        int dValue = screenHeight - statusBarHeight; // 算出ListView实际占用的屏幕高度
        if (dValue % itemHeight == 0) { // 刚好可以装下dValue个item
            ret = dValue / itemHeight;
        } else {
            ret = dValue / itemHeight + 1;
        }
        return ret;
    }

    // 获得屏幕高度
    public static int getScreenHeight() {
        if (mScreenHeight <= 0 && mContext instanceof Context) {
            DisplayMetrics dm = new DisplayMetrics();
            WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
            wm.getDefaultDisplay().getMetrics(dm);
            mScreenHeight = dm.heightPixels;
        }
        return mScreenHeight;
    }

    // 获得屏幕状态栏与标题栏高度之和,如果没有状态栏或标题栏其中之一,则高度为0
    public static int getTopBarHeight(Activity activity) {
        Rect fram = new Rect();

        // 获得显示高度(不包括状态栏)
        activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(fram);
        int statusBarHeight = fram.top;

        // 获得显示高度(不包括标题栏)
        int contentTop = activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
        int titleBarHeight = contentTop - statusBarHeight;
        return statusBarHeight + titleBarHeight;
    }

    // 根据手机的分辨率从 dp 的单位 转成为 px(像素)
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值