移动应用开发Hw1报告
目录
实验内容
做一个小语种学习软件
实验目的
- 熟悉并掌握开发环境
- IDE Android Studio的安装及配置,熟悉IDE的使用
- 虚拟设备的配置 AVD
- git 的使用,参考git 教程.pdf
- 回忆和复习 Java语言的基本使用
- 掌握Android 用户界面编程基础
- Activity生命周期的理解
- 控件的使用
- 布局的使用
项目架构
MainActivity
MainActivity是程序打开的第一个界面,功能是选择软件的学习语言。
布局为ConstraintLayout
采用四个ImageButton放上各国国旗
同时设置点击事件为使用Intent唤起下一个页面BottomActivity
并且使用Intent.putExtra将选择的语言信息传递到下一个页面
具体效果:
bottom
bottom页面底部有一个BottomNavigationView
BottomNavigationView绑定了菜单对应“学习”和“用户”的fragment
“学习”和“用户”页面分别为home_fragment和dashboard_fragment
Fragment是一种可以嵌入在活动中的UI片段,能够让程序更加合理和充分地利用大屏幕的空间,出现的初衷是为了适应大屏幕的平板电脑,可以将其看成一个小型Activity,又称作Activity片段。Fragment不能够单独使用,需要嵌套在Activity中使用,其生命周期也受到宿主Activity的生命周期的影响
home_fragment
这个fragment主要功能是展示课程列表,假定有4个Tour,每个Tour有4个unit
布局使用一个ScrollView使得页面可以滚动查看
每个Tour为一个CardView
每个unit只是单纯的一行Textview
具体效果:
dashboard_fragment
这个fragment主要功能是提供一个登录按钮和用户信息、用户设置
由于Android Studio没有自带的圆形按钮,所以需要在drawable文件夹里编写一个xml文件
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<solid android:color="#03D0F4"/>
</shape>
然后把按钮的背景设置成这个xml文件就能实现圆形按钮
我查了很多博客都说按照这样就能做成,但是我的button按钮设置背景图片却无法显示
后来在博客Android中遇到button按钮设置背景图片无法显示的解决方案找到了解决方案
打开res/values/themes目录下的themes.xml文件
将
<style name="Theme.Lab2_1" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
改为
<style name="Theme.Lab2_1" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">
至于为什么,博主解释说是因为高版本的AS继承了主题的缘故,要改成非继承
然后这个按钮我实现了一个伪登录功能,点击按钮之后“用户信息”下的“用户名”和“邮箱”会从“未登录”变为我预先设好的字符串
这里的实现方法是获取dashboard_fragment的子fragment管理器(使用getChildFragmentManager()方法)调用子fragment——information_page的自己写的login函数,login函数更改两个TextView的值
接下来是一个tabLayout,用于切换“用户信息”与“用户设置”两个页面
“用户信息”与“用户设置”也分别对应information_page和config_page这两个fragment
与在Activity中添加tabLayout不同的是,由于这里在fragment中使用tabLayout,嵌套了fragment,所以在获取Fragment管理器时要使用getChildFragmentManager()方法
information_page
此片段就是显示用户名和邮箱
预设四个TextView塞进TableLayout里
两个TableRow各塞两个TextView
具体效果:
config_page
此页面主要有两个按钮,一个是“返回语言选择”,一个是“退出登录”
“返回语言选择”按钮的实现比较简单,就是直接调用getActivity().finish()使当前的bottomActivity结束,自动返回MainActivity
“退出登录”按钮我的实现方式是在config_page通过调用getParentFragment()方法获取到父fragment——Dashboard_fragment
然后再调用Dashboard_fragment中自己写的logout函数
logout函数会获取dashboard_fragment的子fragment管理器(使用getChildFragmentManager()方法)调用子fragment——information_page的自己写的logout函数
login函数更改两个TextView的值
具体效果:
实现缺陷
- 总觉得还是很丑
- 登录功能是伪的,没有弹窗输入用户名和密码,并且若从“用户”页面切到“学习”页面之后登录状态不会保留,推测和fragment的生命周期以及Activity的数据保存有关