Android 办公自动化(Office Automation)
APP 端:Android
app 端需求文档简述说明:
- app 端登录后,进入到首页界面,首页可以执行查看日志、查看审批、进行考勤、查看公告等操作。
- 首页,可以切换到通讯录以及我的界面。
- 通讯录,可以查看公司的部门结构以及部门成员信息。
- 我的,可以查看我的信息,修改个人信息。
环境配置
- Android Studio 。android-studio-ide-181.5014246-windows
- 夜神模拟器。
- Gradle 。‘com.android.tools.build:gradle:3.2.0’
- 谷歌浏览器。
- eclipse。Maven 。apache-maven-3.5.4-bin 。
Android Studio 创建项目
创建一个最低版本是 6.0 的Android 项目,夜神模拟器的最高版本是 Android 7.0.
开始编写代码。
登录注册
- 登录。

- 创建登录 LoginActivity 继承实现 Activity 。
- activity_login.xml 设置页面布局。

※ 页面设计方面
-
整体页面布局采用的是相对布局(RelativeLayout)的布局样式。
-
页面中的 Logo 设置 。
使用 ImageView 控件加载一张图片,设置图片显示在居中的位置上。

-
9patch 图片(后缀名字是 .9.png 的图片)的使用。
1、9patch 图片是 andriod app 开发里一种特殊的图片形式,文件的扩展名为:.9.png 。
2、9patch 图片的作用就是在图片拉伸的时候保证其不会失真。我们使用 .9 图片,让图片在指定的位置拉伸和在指定的位置显示内容,保证图片的边边角角就不会出现失真。
3、使用 9patch 的好处:整个图片是包裹着想要显示的内容的。如果没有使用 9patch 格式,仅仅充满控件背景而已。


4、制作 .9.png 的图片需要注意这四条黑线具有不同的意义(使用的时候都要添加)。
顶部与左边掌管伸缩:在水平拉伸(竖直)的时候,保持其他位置不动,只在这个点的区域做无限的延伸。
底部与右边掌管内容:在水平拉伸(竖直)的时候,指定图片里的内容显示的区域。 -
Button 的按钮样式。
android share 属性文件的使用。


-
最后的两个按钮设计的比较简单了,页面的整体背景是白色的,所以设置按钮背景是白色的,字体是蓝色即可。

※ 业务处理方面
本人习惯根据需求文档设计好展示页面,设计好页面后,根据页面的控件内容进行逻辑处理。
暂不支持第三方登录。这里的第三方登录仅仅起到对称美化作用。- 登录逻辑,设置记住密码和自动登录的操作。这两项,在现在的 app 中都已经是默认执行了的,这里根据我自己的做法做出来的,如果有网络安全和信息泄露等安全方面问题的话,请留言给我。
在首次登陆时,SplashActivity 的判断是没有自动登录和记住密码的 true 操作,则直接跳转到登录的界面,登录的时候判断是否勾选自动登录、记住密码的操作。
1、SplashActivity 中的业务逻辑。

判断是否有记住密码操作,仅有记住密码操作则通过 SharedPreferences 文件中查询输入的账号与密码传到登录界面。仅有记住密码的操作时,才从SqlLite 数据库查询用户上次登录用户信息,查询到信息内容则跳转到首页。
2、LoginActivity 中对按钮以及单选框执行监听。

根据单选框的选择情况进行设置,自动登录选择,则进行插入数据库的操作,可以将当前登录用户的信息存储到数据库中,也可以不存放密码等内容,存放登录凭证 token 。记住密码的选择,因为这里要区别出记住密码与自动登录的操作,我在记住密码操作上选择了使用 SharedPreferences 文件中,密码选择使用的 md5 加密的方式 , password + username + password 做为盐(salt)来保存密码。 - 点击登录按钮执行的方法处理操作。
这里我没有使用 token 登录的方式,我采用的是 session 存储登录方式,设置 session 存储的时长为 15 天,通过请求的时候发送和获取 cookie 中 JSESSIONID 的内容。并且单独保存起来,登录的时候更新 session 内容即可。
- 注册。
- 创建登录 RegisterActivity 继承实现 Activity 。
- activity_register.xml 设置页面布局。

※ 页面设计方面
【EditText 设置输入框】对 EditText 使用了 shape 属性元素。shape 的存储内容存放到了 Android shape 的文件中。
【Button】button 设置按钮的 shape 样式即可。
※ 业务处理方面
1、点击注册按钮,携带着注册的信息,向后台发送请求。
2、点击注册提交时,需要判断注册输入内容没有空的操作。并且清空输入框的内容,把焦点定焦到对应的 EditText 控件上。

首页(HomeActivity)
- 创建登录 HomeActivity 继承实现 Activity 。
- activity_home.xml 设置页面布局。

※ 页面设计方面
页面上采用了FrameLayout与include 的标签来执行点击切换页面的效果。中间增加了一条View 内容,这样显示出有分层。
※ 业务处理方面 - 主界面点击返回按钮,确认后才推出系统 。


- 为 页面设置新的 ActionBar 。

- 设置 Fragement 的界面切换 。


首页(MainFragment)
- 创建登录 MainFragment 继承实现 Fragment。
- fragment_main.xml 设置页面布局。

※ 页面设计方面
页面整体采用了 LinearLayout 的布局,每一个 Button 与 TextView 同时布局在 RelativeLayout 的内部,设置 TextView 相对于在 Button 下边,并水平居中。
※ 业务处理方面
这里我图简单,仅仅设置了按钮的点击事件,应该设置 RelativeLayout 的布局点击事件,这样点击 Button 与 TextView 的时,都可以执行操作。

日志(LogAllActivity)
- 创建登录 LogAllActivity继承实现 Activity 。
- activity_log_all.xml 设置页面布局。

※ 页面设计方面
页面看上去就显的特别的 low ,没有什么布局样式,日志包括日报、周报、会议纪要、月报四部分内容,最重要的是去写日志的功能。
※ 业务处理方面
页面基本上都是点击事件触犯跳转页面的操作。重点说的是,点击写日志之后的自定义弹窗 AlertDialog 的内容啦。

四种日志的查看界面

四种界面,举日报界面为例,统一采用了 ListView 的加载样式,并且设置了 ListView 为空时,显示 TextView 的内容。设置 ListView 子项的监听,点击子项可以查看更多详细的内容。

写日志的界面(NoteEditActivity)

之前使用准备使用的是 富文本编辑器的插件进行编辑操作,我这里仅仅是显示员工的日志内容,并不需要过多的样式操作。所以使用了两个 EditText 进行设置,并通过 fill_parent 的宽高使得页面不在空旷。

- 保存的按钮时设置在 ActionBar 上边的。
设置一个 menu 的布局(设置一个菜单布局)

创建行的 Menu 布局。android:showAsAction=“always” 用在Activity上,app:showAsAction=“always” 用在 AppCompatActivity 上。

审批(ApprovalActivity)
- 创建登录 ApprovalActivity继承实现 Activity 。
- activity_approval.xml 设置页面布局。

※ 页面设计方面
主要负责界面的跳转,跳转到指定的界面,界面一共11 个按钮,按钮采用了添加前后设置图标样式。

※ 业务处理方面
主要是根据用户点击跳转到指定的界面上。
各种申请界面
(以加班申请为例,不在介绍其他界面信息)

在设计提交信息的时候,需要知道了解提交的信息都有哪些?这些内容是和后台衔接的,知道了要提交哪些信息,这样才能更好的去设计表单,之后提交表单上的信息,完成信息录入(申请的提交)
1、时间选择上。我采用的是 系统的时间弹窗 DatePickerDialog 。还可以查询这方面的插件。

下边这条使用的是 TimePickerView


2、单选框的监听事件。

查看我发起的申请
就是查询记录,然后显示在页面上的操作。重点是 ListView 的使用,以及适配器的运用。

我审批的界面
我审批的内容包括:我审批通过的,我还没有审批的。这里我才用的是动态的方式去加载执行审批组件,对审批通过和审批未通过的加以处理。

通过红色线的名称,区分出来这不是简单的 Activity 中的内容了,这是 AppCompatActivity 中带有的内容。具体用法如下:

由于我全文使用的都是 Activity 的内容,使用 AppCompatActivity 较少 ,所以在完成这个页面需要设置主题为 AppCompatActivity 的主题

这两个视图的存放数据界面,仍然是两个 ListView 作为主要内容的界面。这里不再细说。
考勤(MapActivity)
- 创建登录 MapActivity 继承实现 Activity 。
- activity_map.xml 设置页面布局。
- 这里结合使用的是百度地图,百度地图的具体使用请参考 Android 定位SDK

※ 页面设计方面
主要有三部分内容,一部分是 ActionBar 的显示布局,用于按钮操作。中间内容显示的是百度地图,请在网咯状态良好的情况下使用百度地图。最下边是反馈当前位置与公司的距离,显示上班的打卡要求时间,以及现在的时间,更重要的是去点击按钮,能够进行签到的操作。
1、自定义操作 ActionBar 。
需要自定义菜单栏的内容。

通过重写 OnCreateOptionsMenu(Menu menu) 方法进行设置

紧接着,通过重写 onOptionsItemSelected(MenuItem item),设置菜单栏的点击事件。

2、百度地图的覆盖物,addOverlay();

3、考勤打卡。
考勤打卡是具有严格要求的打卡方式。什么时间打什么样的卡,上班卡,下班卡,迟到卡,旷工卡,早退卡等等,都需要有严格的判断。
本次使用的打卡判定比较简单。

获取规定的打卡时间。

设置上班的打卡规范。

设置下班的打卡规范

动态显示现在的打卡范围。


上述操作每秒刷新的方法如下:
1、首先创建一个Handler对象
Handler handler=new Handler();
2、然后创建一个Runnable对象
Runnable runnable=new Runnable(){
@Override
public void run() {
// 再次调用此 Runnable 对象,以实现每两秒实现一次的定时器操作
handler.postDelayed(this, 2000);
}
};
3、使用PostDelayed方法,两秒后调用此Runnable对象
handler.postDelayed(runnable, 2000); // 实际上也就实现了一个2s的一个定时器
4、如果想要关闭此定时器,可以这样操作
handler.removeCallbacks(runnable);
※ 业务处理方面
1、ActionBar 加载,提供不同的展示数据。
2、百度地图的正常显示,以及覆盖物的增加。
3、数据反馈以及考勤签到。
公告(NoticeListActivity)
- 创建登录 NoticeListActivity继承实现 Activity 。
- activity_notice_list.xml 设置页面布局。

※ 页面设计方面
公告查询的这一方面没有什么特别之处,还是之前的方法,使用 ListView 去展现数据,通过Adapter 适配器重写 getView() 方法,完成子项的视图渲染,设置点击事件,查看具体的签到内容。
※ 业务处理方面
公告自然有不同的一面。在登录成功的时候,我们回去检测公告网址上边是否有公告的存在,如果有则获取公告的内容并显示在 Android 的弹出窗中。【Android 抓取指定网页数据并显示(两种方法,一种获取(直接获取页面源码),一种解析(解析获取标签内容))】
网页有两种格式,一种是 XML;另一种是 HTML,现在使用 HTML 的居多。
1、通过网页请求直接获取网页源码。

2、使用解析器进行解析。
使用 jsoup 对 HTML 进行解析:使用 jsoup 对 HTML 文档进行解析和操作

当页面获取到指定网页中的内容是,可以通过 AlertDialog 的方式自动弹出界面,需要设置当前登录登录显示,不能够返回此界面时,还要发送访问请求。
通讯录(MaillistFragment)
- 创建登录 MaillistFragment 继承实现 Fragment。
- fragment_maillist.xml 设置页面布局。

※ 页面设计方面
页面比较简陋,仅仅一个 GridView 就完事。
※ 业务处理方面

这就要有新的界面与子项设置和数据传递。
1、数据处理。
数据需要刚一开始展现 MaillistFragment 页面的时候就需要加载数据,这样才能保证数据在 MaillistFragment 的显示,与数据的传递。

2、子项目的表现形式。

需要为子项目数据与界面表现添加适配器 (ArrayAdapter)。具体用法同 ListView 。


3、点击子项目执行跳转页面。 - 创建登录 EmployeeListActivity继承实现 Activity 。
- activity_ employeeList.xml 设置页面布局。

※ 页面设计方面
页面分为两份,一部分用来展示部门的信息,另一部分则是用 ListView 展示用列表。
※ 业务处理方面
主要是页面传来数据,在通过数据填充 ListView ,并对 LitView 设置点击事件。

依次向下执行,知道可以查看到员工的具体信息结束。
要想还可以继续查询用户的详细信息。就需要通过点击 ListView 进入到新的界面。并为之进行数据处理。
我的(MyFragment)
- 创建登录 HomeActivity 继承实现 Activity 。
- activity_home.xml 设置页面布局。

※ 页面设计方面
布局内容整体上使用的是 RelativeLayout 布局,控件又在 LinearLayout 基础上(标签内),可以当做在 LinearLayout 的内容之上。总体上又分为三部分。顶部显示用户的信息,底部显示用户退出登录操作,中部便是用户的操作功能(查看个人信息、修改密码等等。)每一个 Button 前后增加了图片,具体大小设置需要到 Java 代码中去设置,暂不支持 xml 调节大小。

※ 业务处理方面
个人信息的显示,动态加载图片的内容,以及 TextView 显示内容,都是随着界面切换出现的,所以需要动态添加方法与布局样式。 - 顶部的内容
顶部主要是 一个 ImageView 和 五个 TextView ,布局要合理。

- 中部的内容
这里则是个人信息的点击事件,触发修改状态,查看个人信息,编辑个人资料的内容。
【修改状态】


【查看全部信息】

【修改密码】

- 底部的内容
退出登录的时候需要,清空登录验证等内容。

PC 端:服务器
PC 端需求文档简述说明:
- 登录权限受限,只有人力资源部同事和部门经理能够登录。
- 发布公告,发布公告到手机端。
- 考勤信息,规定考勤规范,设置打卡内容。
- 审批与请求:发送各种请求。审批请求的处理。
- 部门管理。
环境配置
- Android Studio 。android-studio-ide-181.5014246-windows
- 谷歌浏览器。
- eclipse。Maven 。apache-maven-3.5.4-bin 。
- MySql 5.7 和 Navicat 。
创建一个 Maven 项目。
使用 Maven 结合 SSM 框架创建一个 WEB 项目。
开始编写代码

后台内容主要是操作数据库,为安卓提供数据,这里不再显示后台具体内容。提供主要的方法操作。项目整体目录结构如下:

Android Question。
- Android TextView 设置显示超过 n 行显示省略号。

- Android ListView 适配器出错

- xUtils 插件发送 POST 请求的 JSON 数据。

- 在 编辑日志完成后,提交的时候显示一个保存日志的进度对话框是比较不错的选择。
【方式一】

【方式二】


- OnTouch 方法监听触发两次的原因与解决办法。

- ListView 不显示分割线。

- Android 设置线程休息 10 秒。

- 数据库查询操作建议如下:


- 百度地图配置错误 。一定要依照百度地图的官方的配置进行设置。我出错的位置如下:

- Android 定位

- Android 操作 cookie 。

通过 cookie 获取当前的 session ,并通过 如下方式判断 session是否过期。

- 清除 Sharedpreferences 的内容。


整体架构图
我使用的是 xMind 操作的。



贴出源码:
留下联系方式,可以发源码。

这篇博客详细介绍了如何在Android平台上实现办公自动化,包括环境配置、登录注册、首页功能、日志查看、审批流程、考勤管理和公告查看等。作者强调了9patch图片的使用、页面布局设计、业务逻辑处理以及与服务器的交互。此外,还提到了Android相关的问题和整体架构图。
816





