如何在Android应用中根据日期时间设置默认加载页面?
Android 日历应用按日期加载对应页面实现方案
1. 计算日期对应的页码(年中天数)
核心逻辑是获取指定时间戳对应的日期是当年的第几天,返回值直接作为页面序号即可:
- 兼容Android 7.0及以下版本用
Calendar实现:
// 传入对应日期的时间戳timestamp,单位为毫秒 public int getDayOfYear(long timestamp) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(timestamp); return calendar.get(Calendar.DAY_OF_YEAR); }
- 项目minSdk >= 26可以用更简洁的
LocalDate实现:
public int getDayOfYear(long timestamp) { Instant instant = Instant.ofEpochMilli(timestamp); LocalDate localDate = instant.atZone(ZoneId.systemDefault()).toLocalDate(); return localDate.getDayOfYear(); }
注意:闰年返回值最大为366,你可以根据需求兼容处理,比如默认映射到第365页,或者额外添加一张对应第366天的图片。
2. 根据页码加载对应图片资源
你可以把365张图片按day_1.png、day_2.png...day_365.png的规则命名后放在res/drawable目录下,通过以下代码动态获取资源ID加载:
public int getImageResByPage(int page, Context context) { // 兼容闰年情况,超过365的页码默认取第365页 page = Math.min(page, 365); return context.getResources().getIdentifier("day_" + page, "drawable", context.getPackageName()); }
调用后拿到资源ID直接设置给ImageView即可。
3. 默认跳转到对应页面
如果你的页面容器用的是ViewPager/ViewPager2,直接把计算得到的页码减1(因为容器下标从0开始)设为当前选中项即可:
// 示例:打开应用默认跳转到当日对应页面 long currentTimeMillis = System.currentTimeMillis(); int targetPage = getDayOfYear(currentTimeMillis); // ViewPager设置 viewPager.setCurrentItem(targetPage - 1); // ViewPager2设置 viewPager2.setCurrentItem(targetPage - 1);
内容的提问来源于stack exchange,提问作者Sathish Guru
相关产品推荐
相关产品推荐

