标签:
3系统的详细设计
3.1系统主界面的设计一般思路
一般我们制作头部菜单栏是为了提升软件的可操作性,可以用的是TabHost+RadioGroup相结合的方法来制作这个部分的。菜单栏的底部位置是通过TabHost这个布局来实现的,然后是LinearLayout的线性布局来布置内容。内部的选项卡是通过TabWiget来实现。
首先建立好Android工程(我的工程名为:ScheduleManager),在工程下的res/layout下建立一个名为main的空xml文件,然后在这个文件里按照思路来添加布局代码。
主界面的菜单选项使用RadioGroup来建立,在这里的布局中RadioGroup里容纳4个RadioButton,而RadioButton是单选按钮。在这种情况下就只有也只能有一个RadioButton能被选择,并且在开始时默认了第一个按钮被选中。其中RadioButton的实现方式是在设置了内部的文字,然后再按钮的顶部上添加上图片,实现的代码如下:
<RadioButton
android:text="@string/main_date"
android:drawableTop="@drawable/tab_date"
android:id="@+id/radio_button0"
android:checked="true"
style="@style/main_tab_bottom"/>
从上述代码可以看到,在菜单的每个选项卡样式都是调用了style上的main_tab_bottom来实现样式的,而main_tab_bottom的背景background的值@drawable/btn_bg,btn_bg不是一个简单的背景图片,而是一个xml文件,通过这个文件可以实现菜单选项卡切换时的背景切换的效果,使得这个菜单栏更加的美观,代码是使用了安卓的selector来实现,在这里是通过不停的条件来判断使用哪一个item的,里面包括了几个属性值,如是否获得焦点、是否响应事件、是否点击三个条件。实施的代码如下:
<selector
xmlns:android="http://schemas.android.com/apk/res/android">
<itemandroid:state_focused="true"android:state_enabled="true"android:state_pressed="false"android:drawable="@drawable/btn_bg_s"/>
<itemandroid:state_enabled="true"android:state_pressed="true"android:drawable="@drawable/btn_bg_s"/>
<itemandroid:state_enabled="true"android:state_checked="true"android:drawable="@drawable/btn_bg_d"/>
</selector>
制定完主页面布局后,在src/com.manage.activity下的MainPage文件中OnCreate(OnCreate方法是用来初始化Activity实例对象的)中调用布局,到现在为止顶部菜单栏的布局已经基本完成,但现在里面所对应的内容还是空的。所以就需要在这里给tabHost中添加tab内容,以第一格的tab为例,先是通过Intent的方式新建个mDate,用来实现页面的跳转的方法,然后动态用tabHost来通过addTab的方法添加对应TabSpec的值和各个属性。
最后在添加RadioGroup的选择操作函数,这里是通过switch来完成对应按钮的功能的实现,在每个case项中通过tabHost.setCurrentTabByTag来给与特定的值实现页面上的跳转。
在上述思路下我们的详细的效果图如下:
图3-1 系统主界面
3.2 系统触摸反应及页面跳转的一般设计思路
系统主界面默认选择界面在头部菜单栏下方。
(1)首先是建立一个布局文件,上面一部分是显示部分。使用的是一个TextView类,对应的在的CalendarActivity文件中加入函数来添加头部的年份等信息。
首先需要写了一个CalendarView类,这是为显示所写的一个类,在其中使用重载的方法定义了几个不同参数的CalendarView,用于不同的情况。在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参数进行的。在这里需要添加GridView控件的列为7,列宽为46。并且还加上判断屏幕大小的条件,这需要加入取得屏幕大小的对应函数,这里如果是800*480屏幕的话,就将列宽设置为69。然后进行设置水平和竖直的间距、取值边框、设置居中等操作。
在这个方法里面还需加入个OnTouch方法,用来将gridView中的触摸事件回传给gestureDetector,进行下面的触摸操作,即:
//将gridview中的触摸事件回传给gestureDetector
@Override
publicbooleanonTouch(Viewv,MotionEventevent){
returnCalendarActivity.this.gestureDetector.onTouchEvent(event);
}
});
创建完的布局后,是在里面添加上具体的信息。就当前显示的页面来说,是建立几个对应的参数,用来显示或传接数据。例如在函数开始时就String[]dayNumber=newString[49];这是作为对GridView控件内进行标记序列的,用于下面条件语句的判断等,还有就是界面内的一些控件名的实例化。然后是动态化的对页面进行属性值的设置。
下一步是当前信息的显示,这也需要条件函数来判断是否为符合条件的数据,也是来判断参数position是否在范围内。
通过上述的步骤基本完成了界面中的初步建设。
3.3系统的进入与单词查询模块模块
用户信息不想其他程序那样需要包括用户名、用户密码,也不需要点击“注册”,如果用户没输入必要的字段,更不会就会提示用户输入来完成注册。单词查询模块实现用户查询单词功能,它验证用户提交的单词是否被授权,如果单词为空,会提示请输入用户名,如果单词没输入或输入错误,会输入单词为空或错误,并根据访问权限为用户提供相应的业务功能。一旦进入成功,可以直接进入系统查询单词;这样大大方便了用户的操作。具体程序操作截图如下:
图3-2-1 英文查词及保存生词
图3-2-2 中文查词
3.4单词的翻译模块
对于一款良好的自主学习应用软件而言,可以对自己不熟悉的短句句子进行翻译,具体效果如下:
图3-3 句子翻译模块
3.5 生词本模块
在生词本模块中有在查词过程中保存的生词,在该模块中我们可以对生词进行管理,可以删除生词以及当点击某个生词时可以再次跳转到查询该词的界面,方便二次查询。具体截图如下。
图3-4 生词本模块
遇到的问题:
运行Eclipse时出现了这个错误 :No Launcher activity found! The launch will only sync the application package on the device!
解决办法 :
在AndroidManifest.xml 中添加<category android:name="android.intent.category.LAUNCHER" />
标签:
原文地址:http://www.cnblogs.com/20159207szn/p/4984895.html