基于Android的日历系统_第1页
基于Android的日历系统_第2页
基于Android的日历系统_第3页
基于Android的日历系统_第4页
基于Android的日历系统_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 引言1.1项目背景现在的智能手机已经非常普遍,而且其在生活中所占据的分量以及发挥的作用也是越来越重要,而且,查看时间、日期等功能也越来越完善。基于Android操作系统的智能手机具有非常完善的数据读取功能,这样的优势就可以非常方便的设计日历。同时,Android操作系统源代码都是公开的,可以在很多平台免费获取相应的资源,所以这些信息就可以很轻易的得到。很多用户都需要一个日历系统,方便随时方便的查询时间日期等,这也是所有手机都具有的基本功能。在开发新的日历系统时,一定要保证具有稳定的性能以及很好的客户体验,很好的将这些系统打造成日常生活不可或缺的产品以及方便稳定的工具,这样的生活助手在生活中一定具有很广阔的市场前景,同时也要保证外形美观,功能丰富。本文主要阐述了Android操作系统的开发环境,发展现状以及主要组成模块等,对于该系统的开发应用程序进行了分析,还阐述了其在将来市场环境中具有前景以及不足进行了分析。本次开发的操作系统,可以实现查看日期等基本功能,还可以查询指定日期以及将相应的日期进行阳历与农历的转换。对于日期的管理,可以设置相应的跳转功能,也可以制定日期提醒,设备备忘录等。1.2选题意义本文开发的日历系统基于Android操作系统,能够实现原来设计的基本功能,包括查询日期以及显示制定日期等,而且能够针对阳历转换为相应的农历日期,还有日期管理功能。对于特殊节日的管理,系统也有相应的应对功能;对于日期的管理,可以设置相应的跳转功能,也可以制定日期提醒,设备备忘录等。该系统人机界面良好,操控性能好。40 第二章 Android操作系统简介2.1 Android操作系统基本结构Android操作系统可以划分为四层结构,从最底层开始依次是应用层、应用框架层、系统运行库层以及Linux内核层,基本结构如图1-1.图2-1 Android操作系统基本结构(1)应用层(App1ication)应用层主要用来与用户进行交互,也就是一个人及操作界面,允许用户通过点击等动作完成相应的操作。Android系统也自带一些基础性的应用和操作,比较常用的包括Home,Contacts以及Phone等。设计时可以依据这些应用框图完成相应的设计工作,主要有API程序等。这些基础性的应用程序需要在宣传之后,才能获得相应的推广,从而得到形影的用户群体。(2)应用框架层(App1cation Framework)一般系统设计者在Android操作系统上开发相应的API程序,这就需要系统能够有很好的使用,所有的功能都可以复,基于这种研发体系,就可以开发很好的操作系统,将这些系统应用在Android操作系统上。在开发应用程序时需要用到的组件包括:1)UI 组件,也就是前台操作的UI界面,常用的空间包括List,Table等,这些都是最基本的组件。2)内容服务器组件,这一组件的主要作用就是提供一系保证数据连接或者交换的服务,或者实时共享这些数据,最常见的就是电话本、短消息等功能,一些其他的应用程序也可以基于此组件完成通讯录或者短息的访问,比如说,支付宝可以自动读取联系人。3)资源管理器组件,这一组件一般完成的功能是识别图片、字体的格式以及ID数据等,这些资源和数据可以对系统的资源进行进一步的管理或者享用。4)消息通知管理组件,该组件对于该系统上所有通知进行管理,提示用户查看相应的数据信息,常用的包括微信好友信息的提醒,此时系统的呼吸灯能够显示相应的闪烁频率,提醒用户查看消息。5)活动管理组件,该组件可以保证所有的应用程序都能够在其生命周期内完成数据的控制与管理,所有的连接都在规定时间内有效,一般所有的组件都对应相应的窗格,这是软件进行交互的基础,是界面变化的基础。6)窗口管理组件,该组件完成了全部应用窗体的开启的管理。7)位置管理组件,该组件的基本功能是借助GPS完成客户的定位信息。8)电话管理组件,该组件针对手机上所有的通话数据进行保存以及采集。9)包管理组件,该组件的功能如期名字一样,可以对系统中全部 的应用系统进行管理。(3)系统运行库层(Libraries)系统运行库层(主要是操作系统最底层的操作,不用过多介绍。1)系统C库模块:该模块一般是从系统自带的模块库里查询相应的标准数据,完成BSD的集成,这些数据可以作为嵌入式系统开发的备份文件。2)媒体库模块。该模块主要是进行媒体文件的解码、播放等操作,能够解码的格式包括MP3,MP4,JPEG, MPEG4等。3)界面管理模块:该模块可以需要显示的所有子界面进行管理。4)WebKit模块:该模块可以保证浏览器具有充足的引擎工作,这样就可以保证操作系统具有足够 的空间嵌入视图信息。5)SGL 底层的2D图形引擎。6)OPENGL|ES模块:该模块主要是保证系统能够实现3D的效果,借助一些高品质的心态可以保证系统具有一些加速功能。7)FreeType模块:该模块具有一些矢量显示功能和图文等。8)SQLite模块:该模块可以适用于全部的应用窗体,功能非常强大,一般都是在关系型数据库中显示的比较多。9)Core Libraries模块:该模块的主要作用就是基于Java平台开发相应的数据库,完成相应的数据处理功能。10)Da1vik VM模块:该模块可以保证操作系统保持虚拟机 状态,这样便于计算机能够开发相应的JVM功能。(4)Linux内核层(Linux Kernel)系统的内核层一般是保证系统操作的稳定性以及安全性,对系统的硬件以及软件进行管理,设置相应的网络堆栈,创建相应的模型服务。只有了解了Android操作系统的基本特点,才有可能更好的开发基于此系统的软件和程序,在深入了解了此系统之后就可以在开发软件以及系统的过程中,不走或者少走弯路,开发更加完美的系统。2.2 Android系统组件总的说来,基于安卓操作系统的应用程序分为四种:Activity、Broadcast Intent Receiver、Service以及Content Provide。需要注意的是,个别的操作系统是不具有完整的4组件构成,所有的组件一般都要列在AndroidMani-fest.xm1中,这样就方便系统中制定形影的功能和条件, Activity是最基础的类别,这是一个非常常用而且能够单独显示的组件,一般作为单独的类别显示。系统中所有用到的类都必须从主类中继承过来。所有视图的显示都是基于用户控制界面显示相应的视图控制组件,这样就可以及时给出响应,一般广播类型接收器都以外部数据接口为对接类型,这样的接口还有Web service,这样也可以获得相应的数据接口。(1) Activity 简介应用软件的开发一般是将Activity组件作为单独额页面显示,通常情况下可以针对所有的页面功能进行显示。 (2) Service 简介这一程序应该是具有一定的寿命时间,所有的程序都执行在这些程序,最后的程序属于监视类型。 (3) Broadcast Receiver 简介该模块功能主要是广播接收器,主要是将系统中的信息等进行识别或者是发送,一半需要使用的方法是sendBroadcast()方法,才可以快速的传递信息和数据。 (4) ContentProvider简介该模块主要是借助相应的数据程序将一些数据程序供应给相应的数据程序,这在数据交换过程中使用的频率最高,也可以进行信息的共享。 Android操控系统的很多数据都是显示为图片或者视图,可以支持Content Provider的设定,一般处于系统的底层端口。这些数据访问也需要被授权,在访问以及共享数据的时候,一定要以方便用户使用为最高标准。2.3 Android主要控件(1) EditText主要函数: setText/getText 设置/获取文本内容 setHint 设置缺省显示内容(2) RadioGroup,RadioButtonRadioButton的isChecked()判断是否被选中获取选中RadioButon的ID:设置RadioGroup.setOnCheckedChangeListener方法public onCheckedChanged(RadioGroup group,int checkedId)/checkedId是选中RadioButton的ID。(3)CheckBoxisChecked()判断是否被选中setOnCheckedChangeListener方法监视选中状态改变情况(4)Spinnera,显示数据b,设置下拉列表的风格(可选)adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);c,监听选项选择变更事件setOnItemSelectedListener设置监听去Spinner.OnItemSelectedListener类须实现以下两个方法public void onItemSelected (AdapterView parent, View view, int position, long id)/view 选中项实例,position选择项在adapter中的位置public void onNothingSelected(AdapterView arg0)d,设置选中项Spinner.setSelection(position)/索引从0开始getSelectedItemPosition ()getSelectedItem () /该值toString()则为选中内容的字符串getSelectedItemId ()getSelectedView ()(5)AutoCompleteTextViewsetAdapter设置数据adapter(6)DatePicker,TimePickera,DatePickerb,TimePickerc,获取系统当期时间和日期Calendar.getInstance()返回CalendarCalendar.get (int field) -field 可以为Calendar.YEAR/ Calendar.MONTH/ Calendar.DAY_OF_MONTH/ Calendar.HOUR_OF_DAY/ Calendar.MINUTE(7)ImageView/ImageButton主要方法setImageResource 设置显示图片setAlpha 设置Alphainvalidate 强制更新setScaleType( ScaleType st) 设置图片显示方式,st是一枚举setAdjustViewBounds 设置是否调整控件适应图片大小setBackgroundResource 设置背景(8)GridView(表格显示一系列图片)显示数据setAdapter(ListAdapter adapter)设置数据适配器.数据适配器可以继承自BaseAdapter,该类 public View getView(int position, View convertView, ViewGroup parent) 返回当前选择的视图(ImageView)选项选中监听setOnItemSelectedListenergetSelectedView()返回当前选中的视图(9)ListViewa.显示数据setAdapter(ListAdapter adapter)adapter可为new SimpleCursorAdapter/SimpleAdapter(Context context, int layout, Cursor c, String from, int to)layout 用来显示数据的模板.显示一列可用android.R.layout.simple_list_item_1 两列可用android.R.layout.simple_list_item_2多列则需要自己实现xml视图布局文件b. 动态增删数据adapter.notifyDataSetChanged()c.数据(可用ArrayList构造数据)from :to 用来显示对应列的空件id第三章 基于Android的日历应用3.1需求分析3.1.1 系统目标本次系统开发是设计一个日历系统,并在安卓平台上应用,包括查询日期以及显示制定日期等,而且能够针对阳历转换为相应的农历日期,还有日期管理功能。对于特殊节日的管理,系统也有相应的应对功能;对于日期的管理,可以设置相应的跳转功能,也可以制定日期提醒,设备备忘录等。3.1.2 功能需求描述开发的日历系统需要实现的基本功能如下所示:(1) 能够方便高效的查询日期,包括年月日、节日、阴历等。(2) 对于国内外传统节日以及八卦节日都能够提前查询或者显示。(3) 管理日程,或者定期查询、删改一些数据信息等。(4) 将阳历日期与阴历日期进行转换。(5) 提前查看指定日期。(6) 定位日期功能。3.1.3 界面需求分析用户界面是用户进行操作的界面,借助该界面可以对系统进行操作,不过这些数据应该与客户的需求相关,用户的满意才是系统能够生存的基础,一定要具有良好的人机界面。(1) 人机界面良好,方便查看,所有信息显示清晰。(2) 信息显示丰富,当天信息应包括一些特殊信息以及针对此信息的提醒。(3) 当月信息与前后月信息区别显示。(4) 查询功能丰富。3.1.4 运行需求分析要求日历系统能够安装方便,运行平稳,在运行过程中保持平稳流畅,而且能够自适应频幕尺寸。3.2 系统概要设计3.2.1 系统功能结构这次开发的系统可以在主界面上设置显示当时的日期,在副界面上显示转换功能,也有一些日期管理、跳转等设置,对于日期的定位,需要设置相应的日期,最后的主界面如图3-1。图3-1 日历系统功能结构3.3 系统主界面的设计和实现3.3.1 系统的日历界面系统主界面默认选择日历界面在头部菜单栏下方。(1)首先是建立一个布局文件,上面一部分是显示年月日、生肖和农历的干支纪年。使用的是一个TextView类,对应的在日历的CalendarActivity文件中加入函数来添加头部的年份等信息。在CalendarActivity中实例化CalendarView。并且使用CalendarView中的一个方法,CalendarView(this, getResources(),jumpMonth,jumpYear,year_c,month_c,day_c);。用来书写方法来添加头部信息。首先是对这个页面的头部进行布局,通过动态化的方法来完成。然后建立一个可以进行改变值的StringBuffer类型的参数textDate。对这个参数进行append操作,添加例如年月日的知道参数里。其中有一个闰年判断的条件函数。是通过calV.getLeapMonth()的值惊醒判断的。完成后对界面使用setText方法来赋值到界面上。最后是对界面的一些美化,同样使用动态布局模式进行。(2)下面是日历界面中主体日期部分显示的完成在CalendarActivity文件初始化实例对象时加入动态添加布局文件的方法。将此方法命名为addGridView。由于这里用的是GridView,应用于将一系列的空间组织成二维网格的形式显示出来。所以,适用于我在这里进行的日期界面的建立。同样的首先是动态化布局的建立。这可以实例化GridView为gridView参数进行的。在这里需要添加GridView控件的列为7,列宽为46。并且这需要加入取得屏幕大小的对应函数。这里如果是800*480屏幕的话,就将列宽设置为69。然后进行设置水平和竖直的间距、取值边框、设置居中等操作。在这个方法里面还需加入个OnTouch方法。用来将gridView中的触摸事件回传给gestureDetector,即: /将gridview中的触摸事件回传给gestureDetectorOverridepublic boolean onTouch(View v, MotionEvent event) return CalendarActivity.this.gestureDetector.onTouchEvent(event););创建完日历的布局后,是在里面添加上具体的日期。就当前显示的页面来说,是建立几个对应的参数,用来显示或传接数据。例如在函数开始时就String dayNumber = new String49; 这是作为对GridView控件内进行标记序列的,用于下面条件语句的判断等,还有就是界面内的一些控件名的实例化。 然后是动态化的对页面进行属性值的设置。 下一步是当前月信息的显示,这也需要条件函数来判断是否为当前月,也是来判断参数position是否在范围内。在这个月中还需对当天来一个特殊化。设置当天日期的背景为图片current_day_bgc。并设置字色为#000000。 在这些操作外,还需要得到一些数值来用于日期数据的插入,在这里建立了个getCalendar方法,如判断是否为闰年的函数返回值isLeapyear,某月的总天数,某月的第一天是星期几,上个月总天数。在这方法中再执行方法getweek,用来得出以后需要标记的日期,这个在后面来介绍。通过上述的步骤基本完成了日历界面中的初步建设。(3)由于日历菜单需要能通过手势触摸来进行翻页,所以要在总体布局下建立一个ViewFlipper类。这个类是用来实现屏幕的切换效果的。先是在布局中建立这个类。实例化手势gestureDetector,取得布局中ViewFlipper。这样就可以用于下面的调用。然后是书写书写手势的各个方法。最主要的是onFling的方法实现页面的向左及向右滑动的操作。由IF语句来实现,由滑动开始直接输的x坐标的值进行差值计算。当差值大于120时着向左滑动。在滑动操作开始,就需要载入新的一张日历页面。这里又会用到参数calV,当onFling方法实现时,会将参数calV所代表的函数CalendarView里的jumpMonth加1,代表下一个月。当向右滑动时则将参数calV所代表的函数CalendarView里的jumpMonth减1,代表上一个月。为了完整性剩余的手势函数只是写了方法未使用。3.3.2 系统的日历特色显示这里我肯还需要做干支纪年和节假日阴历显示。这里有两个方法,分别是LunarCalendar 和SpecialCalendar。在LunarCalendar里面包括干支纪年,阴历,生肖,节假日等信息。例如生肖则是建立一个字节数组来记录十二生肖,并且用函数来传回参数对应的生肖。final public String animalsYear(int year) final String Animals = new String 鼠, 牛, 虎, 兔, 龙, 蛇,马, 羊, 猴, 鸡, 狗, 猪 ;return Animals(year - 4) % 12;同样的其他信息,如节假日的名称,也是通过字节数组来储存的。在SpecialCalendar是闰年的判断函数、天数。最后是对每月的第一天星期的判断。闰年通过传回年值通过函数进行判断,并传回布尔值。每月的天数用switch进行判断赋值给月份天数的参数。 对每月的第一天为星期几的判断并指定。/指定某年中的某月的第一天是星期几public int getWeekdayOfMonth(int year, int month)Calendar cal = Calendar.getInstance();cal.set(year, month-1, 1);dayOfWeek = cal.get(Calendar.DAY_OF_WEEK)-1;return dayOfWeek;3.4 系统任务界面的设计任务界面包括任务主界面(所有日程的显示)和对应日期任务的显示,任务的添加等。在任务界面涉及到日程的数据存储,所以先介绍下关于日程的数据存储以及有日程的日期存储(为日历界面的标记服务)。3.4.1 任务界面的数据库准备(1)数据库里表的建立分别建立了schedule表(日程的表)和scheduletagdate(标记日期所需的表),Android 提供了标准的数据库创建方式。建立DBOpenHelper类继承到SQLiteOpenHelper。实现onCreate 和 onUpgrade 两个方法。OnCreate方法是用于初次使用软件时生成数据库,onUpgrade方法是用于升级软件时更新数据库表结构。首先是schedule表的建立。表中包括四个参数。如下图3-2所示。建立时对应需要写上参数名、参数类型、主键等。Schedule日程ID日程类型ID日程重复类型的ID日程正文内容图3-2 schedule所包含的参数db.execSQL(CREATE TABLE IF NOT EXISTS schedule(scheduleID integer primary key autoincrement,scheduleTypeID integer,remindID integer,scheduleContent text,scheduleDate text); 图3-3是scheduletagdate表的建立。在这个表中包括以下参数。scheduletagdate标记的ID年信息月信息日信息图3-3 scheduletagdate所包含的参数db.execSQL(CREATE TABLE IF NOT EXISTS scheduletagdate(tagID integer primary key autoincrement,year integer,month integer,day integer,scheduleID integer); 建立完表后是继续写入onUpgrade方法,这个方法会在数据库升级时被触发,以便于软件升级时更新表结构。(2)再分别建立ScheduleVO 和ScheduleDateTag ,里面分别写了表里面各个数据的get(表示获取某个变量值)和set(表示设置某个变量值)方法,以便于调用。(3)建立ScheduleDAO文件,这个文件是用来写数据库的查找、删除等方法。 首先是需要实例化DBOpenHelper用于数据库数据的get与set。private DBOpenHelper dbOpenHelper = null;public ScheduleDAO(Context context)dbOpenHelper = new DBOpenHelper(context, schedules.db);下面就是对表中数据的操作了。包括了保存日程信息、查询某一条日程信息。查询所有的信息、删除日程、将日程标记的日期保存到数据库中。(1)保存日程信息,先是从日程添加页面里获取日程类型的ID、日程重复类型的ID、日程正文内容、日程日程时间这几个参数,然后是使用ContentValues类(这个类是一个键值对,是用来存储名值对,它的名一般是String类型,而值都是基本类型)来new一个参数,用这个参数的put方法将这些个参数放入到数据库中。values.put(scheduleTypeID, scheduleVO.getScheduleTypeID();/放入日程类型IDvalues.put(remindID, scheduleVO.getRemindID(); /放入重复类型ID values.put(scheduleContent, scheduleVO.getScheduleContent();/放入日程正文内容 values.put(scheduleDate, scheduleVO.getScheduleDate();/放入日程日期信息最后调用添加方法insert。 db.insert(schedule, null, values);/插入信息另外需要moveToFirst方法来判断是否为空,进行相关的操作。(2)查询某一条日程信息,由于我这里的设计是通过对日程的点击来查看当前点击日期的详细信息,即是根据日程的ID来查看的。android sqlite的查询方法是query方法,它的查询语句是:db.query(schedule, new StringscheduleID,scheduleTypeID,remindID,scheduleContent,scheduleDate, scheduleID=?, new StringString.valueOf(scheduleID), null, null, null);另外还需要的是判断语句。先用cursor.moveToFirst()。可以判断curor是否为空值,不为空则就给cursor赋值,空着直接cursor.close()来关闭。(3)查询所有的日程信息,由于所有日期可能不止一个,所以返回值设为数组形式。查询依旧是用query方法,这里的的where语句相关的就直接设为null值。其他的依旧与查询一条语句相仿。(4)删除日程,这里的删除日程需要将日程及对应日期上的标记一起删除,这样才可以便于管理,删除使用的语句是delete。db.delete(schedule, scheduleID=?, new StringString.valueOf(scheduleID);/删除日程信息db.delete(scheduletagdate, scheduleID=?, new StringString.valueOf(scheduleID);/删除日程对应的日期标识信息(5)将日程标志日期保存到数据库中,这里是为了将在日期上标识的信息存储到数据库中,方法同第一步的保存相仿,只是数据的不一样,而且使用的是数组形式。for(int i = 0; i dateTagList.size(); i+)/以for循环的方式进行dateTag = dateTagList.get(i);ContentValues values = new ContentValues();values.put(year, dateTag.getYear();/放入年信息values.put(month, dateTag.getMonth();/放入月信息values.put(day, dateTag.getDay();/放入日信息values.put(scheduleID, dateTag.getScheduleID();/翻入日程的IDdb.insert(scheduletagdate, null, values);/插入到表scheduletagdate中(6)只查询出当前日程的日期,这个查询语句是通过当前月的年和月信息来得到日程标记上的所有信息。这里也是使用query语句进行查询的,只不过改变了里面的查询使用的参数。所以方法类同于上面所有日程的查询。 (7)当点击每一个gridview中item时,查询出此日期上所有的日程标记(scheduleID),通过点击后得到对应日期的年月日信息,然后用query方法得到次日程标记的ID,用于后面得到想到相关的日程信息。query(scheduletagdate, new StringscheduleID, year=? and month=? and day=?, newStringString.valueOf(year),String.valueOf(month),String.valueOf(day), null, null, null);(8)关闭数据库。判断后直接关闭当前数据库。if(dbOpenHelper != null)dbOpenHelper.close();3.4.2 任务界面之新增界面新增界面是通过对日历界面上单一日期的点击来实现跳转的。(1)首先为了界面的美观我建了几个带边框的类。首先是带下边框的TextView。这里TextView类的基础上用画笔实现了下边框的效果。Paint paint = new Paint();/ 实例化一支画笔paint.setColor(android.graphics.Color.BLACK); / 设置所绘制的边框颜色为黑色canvas.drawLine(0, this.getHeight() - 1, this.getWidth() - 1, this.getHeight() - 1, paint); / 绘制下边框带边框的EditText。在这里加上了特殊的样式、颜色及边框的圆弧效果。Paint paint = new Paint();/ 实例化一支画笔paint.setStrokeWidth(1);/设置空心现款paint.setStyle(Style.STROKE);/设置样式paint.setColor(android.graphics.Color.GRAY);/设置颜色paint.setAntiAlias(true);/抗锯齿方法RectF rectF = new RectF(2,0,this.getWidth()-2,this.getHeight()-2);/现在设置相关的参数用于下面的操作。canvas.drawRoundRect(rectF, 8, 8, paint);/画上圆弧最后一个是带边框的TextView。这个与上述的EditText相类似,完成这个列。(2)新增日程界面的布局,建立一个名为schedule的空布局文件。这里的使用的是相对布局RelativeLayout。这样可以更清晰将各个框框组合在一起,使得更加美观。在这个界面中,总体的以RelativeLayout这个相对布局名为总体的布局类,最上面是标题栏,这就是一个上述建立的一个带边框的TextView类。下面分别为日程类型及重复类型这两个类型的选择的点击框。由于使用的相对布局,那么就需要自己设置这两个点击框的位置。这里先建立了日程类型的文本框。以layout_below来将这个文本框放在标题框(用id来定位标题框)下面。下面几个需要特殊设定的参数: android:layout_below=id/scheduleTop/文本框的位置设置 android:layout_width=160dp/文本框的宽 android:layout_height=40dp/文本框的高 android:drawableRight=drawable/schedule_type/在这个文本框右边添加一个图标然后是添加日程重复方式的文本框,这需要放在日程类型文本框的右边。这是利用layout_ toRightOf来实现。相应的也要设置位于标题框下方,其他的与上面的相类似。 android:layout_toRightOf=id/scheduleType/文本框的位置设置位于右方 android:drawableRight=drawable/schedule_type/文本框的位置设置位于下方下面还有时间的点击修改框、日程文本框及最后的保存及取消的按钮。最后效果如图3-4。图3-4 日程添加界面效果图(2)写一个ScheduleAddActivity 类来调用布局和书写方法新增界面的上方有两个TextView是用来选择类型的,另有一个时间显示框可以用来显示传过来的时间或者修改时间。选择类型的实现方法以其中一个为例首先是取得这TextView的位置,实例化它,以便于后面的使用,scheduleType = (BorderTextView) findViewById(R.id.scheduleType);点击时跳到选择界面并传值。跳转的时候需要获得原来界面上的日程类型。这里需要在点击触发效果的方法上将数据传到类型选择页面上去,用于显示它的默认值。scheduleType.setOnClickListener(new OnClickListener() /日程类型的点击事件 Overridepublic void onClick(View v) /点击时方法实现的内容schText = scheduleText.getText().toString();Intent intent = new Intent();intent.setClass(ScheduleAddActivity.this, ScheduleTypeView.class);/实现页面从日程添加页面到日程类型选择页面的跳转intent.putExtra(sch_remind, new intsch_typeID,remindID);/跳转时需要传过去的数据,两个数据组成一个数组传过去startActivity(intent);/运行);这样就需要一个新建ScheduleTypeView文件来实现跳转后的界面。这里还包括一个CalendarConstant类,这个类是用于记录日程类型和重复类型的字符数组,以便于类型选择的调用。public class CalendarConstant public final static String sch_type = 会议, 约会, 电话, 纪念日, 生日, 课程, 其他 ; / 日程类型的值public final static String remind = 当天有效,每天重复,每周重复,每月重复,每年重复;/重复类型的值这里是存储ScheduleTypeView和ScheduleRemindView里面选项的value值。这个页面是通过实例化来实现布局的:LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); /设置宽与高cc = new CalendarConstant();layout = new LinearLayout(this); / 实例化布局对象layout.setOrientation(LinearLayout.VERTICAL);layout.setBackgroundResource(R.drawable.schedule_bk);/设置背景图片layout.setLayoutParams(params);实例化布局里的组件为后面使用时做准备,用于给这些组件添加各项参数。group = new RadioGroup(this);/选择按钮组btSave = new BorderTextView(this,null);/保存按钮实例化btCancel = new BorderTextView(this, null); /取消按钮实例化textTop = new BorderTextView(this, null); /顶部文本实例化这里有个从ScheduleAddActivity传来的值。这是日程新增界面里的日程类型的已选择的ID值。用来选择RadioGroup的默认选项Intent intent = getIntent();int sch_remind = intent.getIntArrayExtra(sch_remind); if(sch_remind != null) /判断不为空时进行下列的赋值sch_typeID = sch_remind0; /日程类型的赋值remindID = sch_remind1; /重复类型的赋值for(int i = 0 ; i cc.sch_type.length ; i+)radio = new RadioButton(this);if(i = sch_typeID) /判断是否是当前选择的项radio.setChecked(true); /设置为已选择 radio.setText(cc.sch_typei); /设置文本内容 radio.setId(i); /设置编号 radio.setTextColor(Color.BLACK); /设置文本颜色 group.addView(radio); /设这系列的内容添加到数组中 将RadioGroup加入到布局中去:layout.addView(group); RadioGroup的触发效果。再点击这里的每一个选项都会显示已选中并且会将选择项的ID值传到schType_temp中用于后面的使用。group.setOnCheckedChangeListener(new OnCheckedChangeListener() Override/重写onCheckedChanged方法public void onCheckedChanged(RadioGroup group, int checkedId) schType_temp = checkedId;/给在上面建立的参数赋值);添加确定和取消按钮(以确定按钮为例),按钮在这边也是通过动态方法来实施的,先新建一个布局参数layButton = new LinearLayout(this);然后给参数设置各项属性,这些都是按钮所需要兼备的基本属性,有利于按钮的美观与实用性,layButton.setOrientation(LinearLayout.HORIZONTAL);layButton.setLayoutParams(params);btSave.setTextColor(Color.BLACK); /设置文本颜色btSave.setBackgroundResource(R.drawable.top_day); /设置背景btSave.setText(确定); /设置按钮上的文本信息btSave.setHeight(47); /设置高btSave.setWidth(160); /设置宽btSave.setGravity(Gravity.CENTER); /设置按钮位置btSave.setClickable(true); /设置按钮的可点击性layButton.addView(btSave); /将保存按钮添加到按钮参数中最后将整个layButton的参数加入到整体布局中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论