HarmonyOS应用开发日历练习 原创
JLTFCalendar(日历)。语言,JAVA。显示当前日期。
一、具体效果呈现
运行项目后显示当月日历
二、练习核心流程与代码
项目目录
MainAbilitySlice.java
// 星期
private final String[] days = new String[]{"日","一","二","三","四","五","六"};
@Override
public void onStart(Intent intent) {
super.onStart(intent);
// 新建table布局并设置样式
TableLayout tableLayout = new TableLayout(getContext());
tableLayout.setWidth(LayoutConfig.MATCH_PARENT);
tableLayout.setHeight(LayoutConfig.MATCH_PARENT);
ShapeElement backgroundShape = new ShapeElement();
backgroundShape.setRgbColor(new RgbColor(255,255,0));
tableLayout.setBackground(backgroundShape);
tableLayout.setRowCount(6);
tableLayout.setColumnCount(7);
// 循环星期
for (String s : days) {
// 调用text并设置值
Text text = text();
text.setText(s);
// 追加到table布局中
tableLayout.addComponent(text);
}
// 日期
Date date = new Date();
// 获取年
int year = date.getYear();
// 获取月
int month = date.getMonth() + 1;
// 获取日
int today = date.getDate();
// 当月的天数
int Count= new Date(year, month, 0).getDate();
// 当月的第一天的星期
int day = new Date(year, new Date().getMonth(), 1).getDay();
// 是否为星期日
if(day != 0) {
// 循环空格
for (int i = 0; i < day; i++) {
// 调用text并设置值
Text text = text();
text.setText("");
// 追加到table布局中
tableLayout.addComponent(text);
}
}
// 循环天数
for (int i = 1; i <= Count; i++) {
// 调用text并设置值
Text text = text();
if(today == i) {
text.setTextColor(Color.RED);
}
text.setText("" + i);
// 追加到table布局中
tableLayout.addComponent(text);
}
super.setUIContent(tableLayout);
}
public Text text() {
Text text = new Text(getContext());
text.setWidth(150);
text.setHeight(150);
text.setTextSize(100);
text.setTextColor(Color.BLUE);
text.setTextAlignment(TextAlignment.CENTER);
return text;
}
难点一:设置行列数
解决方法:这里采用TableLayout表格布局
每周有七天所以是7列;每月天数最大为31天;
所以需要5行(因为每行至多7个);最后加上显示星期的一行
一共6行
背景颜色使用护眼色
难点二:每月第一天的星期的位置
解决方法:设置空白格
空格数为每月的第一天的星期数(0表示星期日。1表示星期一。。。)
// 当月的第一天的星期
int day = new Date(year, new Date().getMonth(), 1).getDay();
完整代码地址:https://gitee.com/jltfcloudcn/jump_to/tree/master/%E6%97%A5%E5%8E%86%E7%BB%83%E4%B9%A0