2021-07-04

# 中山大学数据科学与计算机学院本科生实验报告

## (2021年春季学期)

| 课程名称 | Android现代操作系统应用开发 | 任课老师 | 郑贵锋 |

| :------------: | :-------------: | :------------: | :-------------: |

| 年级 | 2018级 | 专业(方向) | 软件工程专业 |

| 学号 | 18342142 | 姓名 | 周朗 |

| 电话 | 15271612279 | Email |zhoulang3@mail2.sysu.edu.cn|

| 开始日期 | 2021.3 | 完成日期 | 2021.3.22|

---

## 一、实验题目

## MAD2021 HW1

  创建第一个Android 开发项目,在实际项目开发中掌握并理解课堂上的知识和理论,在代码中感受《移动应用开发》的真正魅力!

---

## 二、实现内容

    1. 按照作业要求,使用约束布局,还原各个页面。

    2. 在制作页面时,掌握如:TextView,RecyclerView,TabLayout 等控件的使用方法。

    3. 完成页面跳转等交互功能。 

## 三、实验结果       

### (1)实验截图 

|            选择语言界面            |            学习界面            |

| :-----------------------------: | :-----------------------------: |

|![在这里插入图片描述](./img/img1.png)|![在这里插入图片描述](./img/img2.png)|

|            用户界面(信息)            |            用户界面(设置)            |

| :-----------------------------: | :-----------------------------: |

|![在这里插入图片描述](./img/img3.png)|![在这里插入图片描述](./img/img4.png)| 


### (2)实验步骤以及关键代码

1. 制作选择语言界面 

    该页面的难度集中在**页面的布局**上,我需要将 4 张带标题的图片,加上一个总的标题。 

    这里我采用 LinearLayout,将整个布局看作几个“行式”的内容,并使用 Contraint 布局固定元素在界面中的位置(配置方法:在 XML “design” 模式下,右键元素 -> Constrain -> "parent start" 等,点击之后,自动配置元素在界面中的约束)。 

    除此之外,该页面还需要实现**点击跳转**功能。这里我在对应的 Activity 中(Code -> Welcome)获取图片元素,并配置点击事件: 

    ```

        // english

        ImageView but1 = findViewById(R.id.american);

        but1.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View v) {

                Intent it = new Intent();

                it.setClass(Welcome.this, MainActivity.class);

                it.putExtra("language","学习英语");

                Welcome.this.startActivity(it);

            }

        });

    ```

    上述代码是点击“英语图片”进入“学习英语”的界面(对应 MainActivity)。 

    注:使用 Intent putExtra 添加额外的数据,让跳转后的页面根据用户选择显示不同的内容。 

    ```

    Intent intent=getIntent();

    language=intent.getStringExtra("language");

    ```

    上述代码是在跳转后的(MainActivity)界面构造函数中,通过 Intent 对象,获取跳转过程附加的信息。 

2. 学习列表页面 

    该页面主体即为一个带单元标题的列表。这里我选择使用 RecycleView 来实现列表。 

    制作列表需要的元素有:list.xml(含有 RecycleView 的页面模板),list_item.xml(确定列表每一个单元的模板) 以及一个 Adapter 将数据(这里的数据时在 dummy 文件夹下的 DummyContent 中构建的)以 list_item 的形式 添加到 list 中。 

    这里,我在学习列表所在的 Code -> ListFragment 中获取 RecycleView 后,为其 `setAdapter` 配置适配器。这样一来,便可以制作一个含有列表的 Fragment。 

3. 用户页面   

    用户页面包含一个“登录”的圆形图片(这个依靠绘制一个自定义的 TextView 来完成),然后难点在于使用 TabLayout 完成一个 Fragment 内部的切换器。 

    这里我们仿照主界面的做法,创建两个 Fragments,然后创建 Adapter 将 Fragments 与 TabLayout 连接起来。适配器的制作方法请详见 Code -> dashboard -> MyFragmentAdapter。Java 代码结构图如下: 

    ![在这里插入图片描述](./img/img5.jpg) 

    可以看到,这里我们创建了两个 Fragments,userTab1,userTab2,并编写了对应的模板.xml,为其构造相关元素。 


4. 导航栏的实现 

    本次实验需要制作底部和顶部的导航栏。 

    底部导航栏可以在创建项目时,选择带底部导航栏的模板项目,然后对模板项目的导航代码进行理解和修改,达到实现要求。其中 MainActivity 中导航栏的创建如下: 

    ```

        BottomNavigationView navView = findViewById(R.id.nav_view);

        // Passing each menu ID as a set of Ids because each

        // menu should be considered as top level destinations.

        AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(

                R.id.navigation_list, R.id.navigation_dashboard)

                .build();

        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);

        // NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);

        NavigationUI.setupWithNavController(navView, navController);

    ```

    顶部导航栏,由于项目模板自带的顶部 ActionBar 不能够添加“返回按钮”,所以我们在 AndroidManifest.xml 中,将项目的 theme 属性配置为 "NoActionBar" 即可去掉模板自带的标题栏,然后使用 LinearLayout 自己制作一个顶部导航栏。 

    制作顶部导航栏有一个需要注意的地方就是,必须在导航栏所在的 Fragment 的 OnCreateView 中去绑定点击事件,而不能在 MainActivity 的 OnCreate 中去绑定,因为这个时候,相应的 Fragment 以及其中的元素都没有创建,编译器会报错,“为空指针绑定点击事件处理函数”。

---

## 四、实验思考及感想 

  在这次实验中,我对**约束布局**有了更深刻的理解,一开始只使用了线性布局,真正运行的时候,所有元素都错位到了一块儿,只有在配置了每个最外层的元素相对于 parent 的约束布局,才能够保证所有元素在确认的位置显示。 

  然后就是各个控件的使用了,从需要变成圆形的 TextView,到需要配置 Adapter 的 RecycleView 和 TabLayout,课堂上一知半解的内容,到了实际使用时遇到了很多困难。最后在参考了 Android 提供的使用模板,以及很多博客的指导意见之后,终于使用这些控件做出了想要的页面效果。 

  最后,需要改进的地方,应该就是对 Android 的整个项目结构还是有不清晰的地方,比如 Manifest.xml 时如何控制整个项目的样式的,等等。希望在接下来的学习中,一方面能够对 Android 项目架构有更清晰的认识,另一方面,也希望自己使用各种控件时,能够更加熟练、高效。 

感谢观看。 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 12,711评论 2 59
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,389评论 0 17
  • “你给生活意境,”生活才会给你风景,你风声鹤唳,生活也会四年楚歌”,如果只尽情的享受现世的浮华,便没有精力去编织未...
    迷离的花影阅读 117评论 0 0
  • 世法哲言》 (八) 【 雄才之料必当内充其实也,华其外而碎其内弗可大器而登堂,心空之竹终非栋梁之材。】 图片 凡...
    797885d211d1阅读 121评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,535评论 28 53