發布時間:2018-07-16所屬分類:科技論文瀏覽:1次
摘 要: Android系統有著良好的用戶體驗,低廉的成本及高開發性得到了廣泛的應用。而日歷行程應用作為智能終端的出廠必備控件,更是Android系統中不可或缺的一部分,該系統是一個基于Android手機的日程管理系統,具有基本的活動日程安排功能,在日歷瀏覽中可突出顯示
Android系統有著良好的用戶體驗,低廉的成本及高開發性得到了廣泛的應用。而日歷行程應用作為智能終端的出廠必備控件,更是Android系統中不可或缺的一部分,該系統是一個基于Android手機的日程管理系統,具有基本的活動日程安排功能,在日歷瀏覽中可突出顯示安排的日期。為了加強提醒效果,該系統設計了只有完成指定小游戲后才能關閉提醒功能。
關鍵詞:課程表,日程表,鬧鐘提醒
1 背景
隨著移動互聯網的高速發展,人們已經無法離開移動終端,智能手機也已經越來越普及,對人們的生活產生了巨大的影響,人們可以隨時隨地使用手機,隨時隨地來查看信息,隨時隨地用來上網等,當然也急需青春地了解到自己每天所需要完成的事情,或是需要記錄一些容易忘記的重要事件,并能有一個功能完善的軟件來幫助人們完成這些事情。在這樣的大背景下,基于安卓平臺的日歷行程系統軟件也逐漸進入安卓開發者的視野中[1]。
2 多功能日程表應用設計
2.1 多功能日程表總體設計
設計并實現一款基于Android平臺的日歷行程系統,具備基本的日期顯示功能;能夠設置課程安排等;并提供發布日記功能,鬧鐘提醒等功能。如圖1。
2.2 多功能日程表功能介紹
該應用中主頁面導航欄包含日記、課程表、代辦事項、日歷等四部分,菜單欄目區域有設置,邀請好友、鬧鐘、登陸退出功能等。如圖2。
用戶點擊軟件圖標,打開軟件,注冊登錄后:
1)可以看見當前日記
2)用戶可以單擊手機上的菜單按鈕,選擇不同的功能,包括設置,邀請好友,鬧鐘,退出等功能。
4) 用戶可以點擊下方導航欄按鈕進行選擇功能,包括日記,課程表,代辦,日歷等。
4)用戶可以在日記選擇按鈕中發布刪除日記,在課程表中添加設置課程安排,在代辦中查看設置自己的行程和鬧鐘,在日歷中查看當前日期。
5)用戶添加了代辦事項,啟動的提醒服務后,只有完成指定小游戲才能將其關閉。
3 多功能日程表應用實現
該系統采用java編寫,Android studio開發。使用MVC模式架構,數據庫為SQLite[2]
使用了Material Design、Fragment+ViewPager+RadioButton、CardView、CalendarView等框架或部分自定義view開發。
3.1 使用Fragment+ViewPager + RadioButton 來構造導航欄
ViewePager是一個頁面切換組件,我們可以在里面添加多個View。可以通過觸摸屏幕左右滑動的方式來切換不同的View,當然也可以通過RadioButton的狀態標記來跳轉至不同的View。另外,ViewePager是有著自己特定的Adapter--FragmentPagerAdapter,我們只需重寫FragmentPagerAdapter里的方法就能進行使用了[3]。
3.2 鬧鐘提醒功能的創建
我們需要調用AlarmManager.set()來把鬧鐘時間記錄到系統里,這樣,當到達設定的鬧鐘時間時,系統會給程序發送一段廣播,所以,我們還需要通過復寫onReceive()創建一個廣播接收器。最后,別忘了在Manifest把剛寫好的廣播接收器給注冊了[4]。
3.3 使用Calendarview構建日歷
日歷視圖(Calendarview)可用于顯示和選擇日期,用戶既可選擇一個日期,也可通過觸摸來滾動日歷。如果希望該控件的日期改變,可調用CalendarView的setOnDateChangeListener()方法來為此組件的點擊事件添加監聽器[5]
public class CalendarFragments extends Fragment implements OnMonthChangedListener,OnDateSelectedListener{
private View layout;
private LayoutInflater mInflater;
private MaterialCalendarView mCalendarView;
private static final DateFormat FORMATTER = SimpleDateFormat.getDateInstance();
private TextView mTv2;
private Alarm alarm;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
initUI(inflater, container);
return layout;}
private void initUI(LayoutInflater inflater, ViewGroup container) {
if(layout==null){
mInflater=inflater;
layout = inflater.inflate(R.layout.fragments_calendar, container, false);
findview();
initData(); } }
@Override
public void onStart() {
// TODO Auto-generated method stub
super.onStart();
Calendar instance2 = Calendar.getInstance();
CalendarDay date = CalendarDay.from(instance2.get(Calendar.YEAR), instance2.get(Calendar.MONTH),instance2.get(Calendar.DAY_OF_MONTH));
mCalendarView.setSelectedDate(date);
alarm = getNext();
if(null!=alarm){
Calendar c = Calendar.getInstance();
if(c.get(Calendar.YEAR)==alarm.getAlarmTime().get(Calendar.YEAR)&&
c.get(Calendar.MONTH)==alarm.getAlarmTime().get(Calendar.MONTH)&&
c.get(Calendar.DAY_OF_MONTH)==alarm.getAlarmTime().get(Calendar.DAY_OF_MONTH)){
mTv2.setText(alarm.getAlarmName());
}else{mTv2.setText("今天活動已超時或者無任何活動"); }
}else{mTv2.setText("今天活動已超時或者無任何活動"); } }
private void initData() {
mCalendarView.setSelectionColor(getActivity().getResources().getColor(R.color.main_background));
Calendar instance2 = Calendar.getInstance();
CalendarDay date = CalendarDay.from(instance2.get(Calendar.YEAR), instance2.get(Calendar.MONTH),instance2.get(Calendar.DAY_OF_MONTH));
mCalendarView.setSelectedDate(date);
mCalendarView.state().edit().setCalendarDisplayMode(CalendarMode.MONTHS).commit();
mCalendarView.setTopbarVisible(true);
mCalendarView.setOnDateChangedListener(this);
mCalendarView.setOnMonthChangedListener(this);
alarm = getNext();
if(null!=alarm){
Calendar c = Calendar.getInstance();
if(c.get(Calendar.YEAR)==alarm.getAlarmTime().get(Calendar.YEAR)&&
c.get(Calendar.MONTH)==alarm.getAlarmTime().get(Calendar.MONTH)&&
c.get(Calendar.DAY_OF_MONTH)==alarm.getAlarmTime().get(Calendar.DAY_OF_MONTH)){
mTv2.setText(alarm.getAlarmName());
}else{mTv2.setText("今天活動已超時或者無任何活動"); }
}else{mTv2.setText("今天活動已超時或者無任何活動"); } }
private void findview() {
mCalendarView = (MaterialCalendarView) layout.findViewById(R.id.calendarView);
mTv2 = (TextView) layout.findViewById(R.id.textView2);
}
3.4 繪制一個課程表
先使用多個LinearLayout布局嵌套來會出課程表表格,再通過使用Fragment來動態加對應的內容并設置對應的點擊事件即可
//初始化課程表
private void initWeekCourseView() {
for (int i = 0; i < mWeekViews.size(); i++) {
initWeekPanel(mWeekViews.get(i), getCourseData()[i]); } }
//添加課程表
private void addWeekCourseView() {
for (int i = 0; i < mWeekViews.size(); i++) {
initWeekPanel(mWeekViews.get(i), getSingleData()[i]); } }
//頂部周一到周日的布局
private void initWeekNameView() {
for (int i = 0; i < mWeekViews.size() + 1; i++) {
TextView tvWeekName = new TextView(getActivity());
LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
ll.gravity = Gravity.CENTER | Gravity.CENTER_HORIZONTAL;
if (i != 0) {
ll.weight = 1;
tvWeekName.setText("周" + intToZH(i));
if (i == getWeekDay()) {
tvWeekName.setTextColor(Color.parseColor("#FF0000"));
} else {
tvWeekName.setTextColor(Color.parseColor("#4A4A4A")); }
} else {
ll.weight = 0.8f;
tvWeekName.setText(getMonth() + "月"); }
tvWeekName.setGravity(Gravity.CENTER_HORIZONTAL);
tvWeekName.setLayoutParams(lp);
weekNames.addView(tvWeekName); } }
// 左邊節次布局,設定每天最多12節課
private void initSectionView() {
for (int i = 1; i <= maxSection; i++) {
TextView tvSection = new TextView(getActivity());
LinearLayout.LayoutParams ll = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, getResources().getDimensionPixelSize(R.dimen.sectionHeight));
ll.gravity = Gravity.CENTER;
tvSection.setGravity(Gravity.CENTER);
tvSection.setText(String.valueOf(i));
tvSection.setLayoutParams(lp);
sections.addView(tvSection); } }
//當前星期
public int getWeekDay() {
int w = Calendar.getInstance().get(Calendar.DAY_OF_WEEK) - 1;
if (w <= 0) {w = 7;} return w;}
//當前月份
public int getMonth() {
int w = Calendar.getInstance().get(Calendar.MONTH) + 1;
return w; }
// 每次刷新前清除每個LinearLayout上的課程view
private void clearChildView() {
for (int i = 0; i < mWeekViews.size(); i++) {
if (mWeekViews.get(i) != null)
if (mWeekViews.get(i).getChildCount() > 0)
mWeekViews.get(i).removeAllViews(); } }
4 結束語
該次開發的日歷行程系統可以在安卓平臺上平穩運行,實現了原來計劃的多有功能,可以查詢日期以及其他功能。而且還有日期管理功能。對于行程鬧鐘的管理,系統也有相應的應對功能;對于日期的管理,可以設置相應的跳轉功能,也可以指定日期提醒,設備備忘錄等。該系統人機界面良好,操控性能好。
參考文獻:
[1] 郭霖. 第一行代碼Android[M].2版. 北京: 人民郵電出版社, 2014.
相關范文閱讀:單片機在自動控制系統設計中的應用
在自動控制系統設計中,單片機占據核心地位,由于單片機具備可編程的特點,可以簡單、快速的實現自動化控制。下面文章就是以電機設備為研究背景,分析單片機在自動控制系統設計中的應用。
關鍵詞:單片機,自動控制系統,設計
SCISSCIAHCI