实验目的

1、熟悉App开发常用的一些组合控件,主要包括底部标签栏的实现和用法、顶部导航栏的用法、横幅轮播条的实现和用法、循环视图3种布局的用法、材质设计库3种布局的用法等;

实验内容

仿淘宝主页

上图是淘宝App的主页截图,这也是电商App的通用模板。类似的电商App还有:(1)京东;(2)唯品会;(3)苏宁易购;(4)当当;(5)美团。本次实验也可以仿这几个电商平台中的某个实现。

实验过程(实验的设计思路、关键源代码等)

源代码:https://gitee.com/shentuzhigang/mini-project/tree/master/android-taobao

package io.shentuzhigang.demo.taobaoimport android.app.ActivityGroup
import android.content.Intent
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.LinearLayout
import io.shentuzhigang.demo.taobao.R
import io.shentuzhigang.demo.taobao.DepartmentCartActivity
import io.shentuzhigang.demo.taobao.DepartmentClassActivity
import io.shentuzhigang.demo.taobao.DepartmentHomeActivityclass DepartmentStoreActivity : ActivityGroup(), View.OnClickListener {private val mBundle = Bundle() // 声明一个包裹对象private var ll_container: LinearLayout? = nullprivate var ll_first: LinearLayout? = nullprivate var ll_second: LinearLayout? = nullprivate var ll_third: LinearLayout? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_department_store)// 从布局文件中获取名叫ll_container的线性布局,用于存放内容视图ll_container = findViewById(R.id.ll_container)ll_first = findViewById(R.id.ll_first) // 获取第一个标签的线性布局ll_second = findViewById(R.id.ll_second) // 获取第二个标签的线性布局ll_third = findViewById(R.id.ll_third) // 获取第三个标签的线性布局ll_first?.setOnClickListener(this) // 给第一个标签注册点击监听器ll_second?.setOnClickListener(this) // 给第二个标签注册点击监听器ll_third?.setOnClickListener(this) // 给第三个标签注册点击监听器mBundle.putString("tag", TAG) // 往包裹中存入名叫tag的标记串changeContainerView(ll_first) // 默认显示第一个标签的内容视图}override fun onClick(v: View) {if (v.id == R.id.ll_first || v.id == R.id.ll_second || v.id == R.id.ll_third) {changeContainerView(v) // 点击了哪个标签,就切换到该标签对应的内容视图}}// 内容视图改为展示指定的视图private fun changeContainerView(v: View?) {ll_first!!.isSelected = false // 取消选中第一个标签ll_second!!.isSelected = false // 取消选中第二个标签ll_third!!.isSelected = false // 取消选中第三个标签v!!.isSelected = true // 选中指定标签if (v === ll_first) {// 切换到第一个活动页面DepartmentHomeActivitytoActivity("first", DepartmentHomeActivity::class.java)} else if (v === ll_second) {// 切换到第二个活动页面DepartmentClassActivitytoActivity("second", DepartmentClassActivity::class.java)} else if (v === ll_third) {// 切换到第三个活动页面DepartmentCartActivitytoActivity("third", DepartmentCartActivity::class.java)}}// 把内容视图切换到对应的Activity活动页面private fun toActivity(label: String, cls: Class<*>) {// 创建一个意图,并存入指定包裹val intent = Intent(this, cls).putExtras(mBundle)// 移除内容框架下面的所有下级视图ll_container!!.removeAllViews()// 启动意图指向的活动,并获取该活动页面的顶层视图val v = localActivityManager.startActivity(label, intent).decorView// 设置内容视图的布局参数v.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)// 把活动页面的顶层视图(即内容视图)添加到内容框架上ll_container!!.addView(v)}companion object {private const val TAG = "DepartmentStoreActivity"}
}

实验结果(实验最终作品截图说明)


实验心得

1、熟悉App开发常用的一些组合控件,主要包括底部标签栏的实现和用法、顶部导航栏的用法、横幅轮播条的实现和用法、循环视图3种布局的用法、材质设计库3种布局的用法等;

参考文章

《移动项目实践》实验报告——Android组合控件相关推荐

  1. android自定义组件属性,Android组合控件详解 自定义属性

    组合控件详解 & 自定义属性 组合控件是自定义控件的一种,只不过它是由其他几个原生控件组合而成,故名组合控件. 在实际项目中,GUI 会遇到一些可以提取出来做成自定义控件情况. 一个自定义控件 ...

  2. android组合控件的焦点,撸一个简单的TV版焦点控制的日历控件

    1.效果 最近需求要一个遥控控制的日历控件,找了半天没找到轮子,就自己撸一个,先看效果图: 效果图.gif 2.XML属性,所有属性默认为效果图 calender_textSize:星期和日期的字体大 ...

  3. Android 组合控件之删除文本框

    1.闲聊 说到组合控件,人人都会.为什么要这么说呢?可以这样说我们每一个layout布局都是你定义的组合控件,但是,当你需要实现同一种功能的时候,有N个界面都需要这种组合控件,你们可能会想了:我每次使 ...

  4. 《移动项目实践》实验报告——Android高级控件

    实验目的 1.熟悉App开发常用的一些高级控件及相关工具,主要包括日期时间控件的用法.列表类视图及其适配器的用法.翻页类视图及其适配器的用法.碎片及其适配器的用法等: 2.熟悉四大组件之一广播Broa ...

  5. 《移动项目实践》实验报告——Android中级控件

    实验目的 1.熟悉App开发常用的一些中级控件及相关工具,主要包括各种布局用法.特殊按钮的用法.下拉框与基本适配器的用法.编辑框的用法等: 2.掌握Activity的基本概念与常见用法: 实验内容 2 ...

  6. 《移动项目实践》实验报告——Android初级控件

    实验目的 1.掌握Android屏幕显示与初级视图的相关知识: 2.掌握包括屏幕显示基础.简单布局的用法.简单控件的用法.简单图形的用法 实验内容 以windows上的计算器为例,程序界面如下图所示: ...

  7. android组合控件 重叠,Android 组合控件实现布局的复用的方法

    看到很多项目会有实现自己的标题栏的做法,通常的界面是左边按钮或文字,加上中间的标题和右边的按钮或文字组成的.比较好的一种做法是使用include标签,复用同一个xml文件来实现布局的复用.但是这种方法 ...

  8. Android学习--02(猜猜我的星座App源码+Android常用控件TextView+EditText+Button+ImangeView+DatePicker+App间通信+跳转页面)

    猜猜我的星座App 1 Android常用控件 1.1 TextView控件 1.1.1 简介 1.1.2属性 1.1.3 扩展属性 1.1.4 TextView的使用方法 1.1.5总结 1.2 E ...

  9. Android Studio自定义组合控件

    在Android的开发中,为了能够服用代码,会把有一定共有特点的控件组合在一起定义成一个自定义组合控件.  本文就详细讲述这一过程.虽然这样的View的组合有一个粒度的问题.粒度太大了无法复用,粒度太 ...

最新文章

  1. Java创建MySQL句柄_MySQL创建用户(CREATE USER)
  2. 考研专业课计算机网络调剂,计算机网络信息中心2019年硕士研究生接收调剂信息公告...
  3. android 开发环境 配置和说明
  4. why object family error message is filtered out
  5. 用冒泡法对10个整数从小到大排序
  6. GNU glibc 爆 gethostbyname 缓冲区溢出漏洞
  7. 3dmax入门基础知识:3dmax常用功能
  8. android 编程app_2020年用于Android App开发的顶级编程语言
  9. Elasticsearch之快速入门篇(个人笔记)
  10. R语言生存分析:Cox回归
  11. 用OneTab减少Chrome内存消耗
  12. 华为云内网服务器通过公网服务器访问外网
  13. 三国杀移动版虎牢关模式神吕布技能是什么?
  14. 1688关键词搜索api(附可用)
  15. Beautiful Soup 4.4.0 文档 — beautifulsoup 4.4.0q 文档
  16. Markdown 常用语法
  17. Android自定义View(七)_Canvas之图片文字
  18. Android应用开发中,第三方集成新浪微博(sinaWeiboSDK)的过程记录
  19. 快速入门rsync远程同步
  20. 【已解决】运行tsc **.ts后提示“无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\tsc.ps1,因为在此系统上禁止运行脚本。”

热门文章

  1. linux服务器报Too many open files的解决方法
  2. 使用存储过程及触发器案例
  3. wordpress content.php,2020主题:content.php
  4. aop springboot 传入参数_Spring、SpringMVC和SpringBoot看这一篇就够了!
  5. thinkphp5 图片压缩旋转_【好工具】在线免费无限制的PDF处理工具(转换、编辑、分割、合并、压缩)...
  6. jdbc mysql 换行符_mysql JDBC URL格式各个参数详解
  7. 动态让控件超出屏幕_JAVA浏览器控件JxBrowser v7.5上线!更轻松处理Dynamic Favicons...
  8. php和dart的区别,Dart相等和关系运算符
  9. Spring-data-redis集成提交数据出现'maxActive'和‘maxWaitMillis’错误
  10. 五十八、Vue中的计算属性,方法和侦听器