书店网站建设人员分配,百度推广要不要建网站,百度手机网页版,一个网站的百度反链多好还是少好本文章主要展示课表的实现#xff0c;里面包含很多控件的用法#xff0c;比如吐司Toast、通知Notification、ListView#xff0c;数值选择器NumberPicker#xff0c;SeekBar同editText的关联。抽屉导航栏 还有一些其他的功能#xff0c;比如InputFilter自定义的字符过滤器… 本文章主要展示课表的实现里面包含很多控件的用法比如吐司Toast、通知Notification、ListView数值选择器NumberPickerSeekBar同editText的关联。抽屉导航栏 还有一些其他的功能比如InputFilter自定义的字符过滤器SharedPreferences保存数据自定义对话框日期计算等
实验数据及结果分析
主要思路
一、需求分析 因为课表保存在图库之中每次打开查找十分麻烦并且课程有上课周之分需仔细辨别。不同用户课程不同可能会出现突然加课需要能够修改课程不同地区学校的上课时间也可能有细微不同用户需要自定义每日上课节数。为了更好的体验还可能需要自定义文字大小等参数。或者打开app直接告诉我今天上什么课程。
二、功能分析
根据需求我们需要通过用户录入的课程结合开学时间和今日时间显示本周课程同时支持切换周查看下周课程录入课程时需要可选择上课周数支持添加和修改上课时间支持一周上多节课或者不上课。为了方便识别需要让课表上相同的课程显示相同的颜色。其他细节上的优化以使用体验再做修改。
2.实现结果 以下是课表的一些演示华为P50E实机 以下是课表中用到的各种技术
1.抽屉导航栏
采用androidx.drawerlayout.widget.DrawerLayout在activity_main.xml中DrawerLayout中第一部分使用了include导入main_content.xml文件中的内容方便导航栏与主体内容分开编写。在主页面java文件中使用drawer_layout.openDrawer(GravityCompat.START);
可以打开抽屉导航栏。
2.JAVA动态添加控件
课程显示和左边时间轴的显示都是动态添加到网格布局中的使用了GridLayout.LayoutParams类型与course_gridLayout.addView()函数相结合具体操作可以看代码。其他的一些比如设置中时间轴的数目也同理。
3.日期数字选择和颜色选择等对话框
程序使用了大量对话框与用户做交互比如选择课程颜色时除了预设的几种颜色以外还可以点击左边的调色盘来RGB选色这里的对话框用到了拖动条和输入文本框的回调数字选择器也很常见。其中利用了SeekBar和EditText的回调函数。
4.SharedPreferences储存数据
由于课表数据量不大所以这里用到了SharedPreferences来存储数据并且为了存储复杂的课程数据写了Course_Data类进行字符串转换变量。从而使得每个课程只需设置一个键即可存储。 5.ListView的使用
课表中在两处使用到了ListView分别是创建课程的课程时间部分和抽屉导航栏中的所有课程并写了两个适配器Adapter_Course_Data和Adapter_CourseAdapter_Data简单Adapter_Course_Data东西多比较复杂。
其中因为ListView的复用逻辑会出现渲染和逻辑上的问题比如我在第0项往下滑动露出第1项一点再划上去点逻辑上应该是第0项的按钮但实际会执行第1项的按钮。为了避免这些问题我使用了listView.smoothScrollToPosition(position);来让用户滑动时窗口有一定的顶端吸附能力在第1项点不到第0项的按钮从而解决了这个问题。 6.通知
仅有一个今日课程的简易通知在MainActivity.java中使用了Send_Schedule_Notification()函数进行通知的发送并通过复用通知来更新之前的通知从而实现了显示今日课程与上课时间的功能 7.正则表达式
在设置中当用户输入时间时用到了String regex ^([01]?[0-9]|2[0-3]):[0-5]?[0-9]$;来做正则匹配使得用户的输入限制在0~23:0~59这样的24小时制格式。 8.字符过滤器
有两个字符过滤器第一个Custom_Input_Filter.java用于添加课程时限制输入“ | ”这三个字符因为上面的字符串转换时用这几个作为分隔符第二个Custom_Input_Filter_number.java用于在设置中用户输入时间时限制数字与上面正则表达式配合。 9.亮、暗深、浅主题手动切换
打开抽屉导航栏上面有张AI绘制的图片点击即可切换亮暗主题。主要就是用getDelegate().setLocalNightMode()函数进行主题颜色的切换同时设定了亮暗两个styles.xml文件在布局中使用相同的style名不同主题下就会调用不同文件中的style从而实现主题切换。