standupTimer是一个开源项目,这个项目涉及的Android知识点并不是太多也不复杂,所以对于初学者来说,读起来并不困难。
关于这个项目有个系列博客,系统地介绍了standupTimer是项目所涉及的知识点,其中包括常用的知识点PowerManager和PowerManager.WakeLock还有android的Handler机制,不仅仅是这些知识点,博客还从更高的单件模式和MVC设计框架的视角来解析该项目,不过美中不足的是,standupTimer项目有一套完整的测试方案,在该博客中有提到,但是没有具体解析,希望有兴趣的博友能总结下并贴出来。
博客的地址是:http://www.cnblogs.com/keyindex/archive/2010/08/31/1809943.html
对于初学者来说,这个项目中有很多的知识点需要学习总结消化,而这些知识点见仁见智,不同的读者或者对不同的知识点感兴趣,我就我个人而言做些小知识点的总结,这篇博客总结的是standupTimer项目中的布局容器,这个知识点之前没有碰到过,所以总结在此。
standupTimer项目的主布局文件main.xml比较简单明了,包括七个组件,其中三个TextView分别用来显示与会人数(Number of participants),会议时长(Length of meeting)和与会小组名称(Team),一个EditText用来让用户输入与会人数,一个Spinner组件用来下拉显示小组名字,一个Button组件用来开始计时,这些都是比较常用的组件,还有一个是一个布局LinearLayout,这个布局组件就是用来动态加载View对象的,这是在xml文件中声明下,然后在代码中实例化,并根据用户设置情况进行动态加载View对象。

main.ml文件中的布局组件定义如下:

<LinearLayoutandroid:id="@+id/meeting_length_container"android:layout_width="fill_parent"android:layout_height="wrap_content"android:layout_marginLeft="100dp"android:layout_marginRight="100dp"android:layout_marginTop="5dp"android:gravity="center" />

在类ConfigureStandupTimer中对UI进行初始化的时候实例化容器,并根据用户设置填充对象:

private void initializeMeetingLength() {/*实例化容器,并删除容器中的所有View对象,以便重新加载*/ViewGroup meetingLengthContainer = (ViewGroup) findViewById(R.id.meeting_length_container);meetingLengthContainer.removeAllViews();View meetingLengthView = null;if (Prefs.allowVariableMeetingLength(this)) {/*读取用户设置,根据设置初始化View*//*创建Text类型View组件*/meetingLengthView = createMeetingLengthTextBox();} else {/*创建Spinner类型View组件*/meetingLengthView = createMeetingLengthSpinner();}/*填充View对象到布局容器中*/meetingLengthContainer.addView(meetingLengthView);
}/*创建Text组件的具体实现函数,注意要把Spinner类型组件赋值为null */
private View createMeetingLengthTextBox() {meetingLengthEditText = new EditText(this);meetingLengthEditText.setGravity(Gravity.CENTER);meetingLengthEditText.setKeyListener(new DigitsKeyListener());meetingLengthEditText.setRawInputType(InputType.TYPE_CLASS_PHONE);meetingLengthEditText.setLayoutParams(new LayoutParams(dipsToPixels(60), LayoutParams.WRAP_CONTENT));meetingLengthEditText.setText(Integer.toString(meetingLength));meetingLengthEditText.setLines(1);meetingLengthSpinner = null;return meetingLengthEditText;
}/*创建Spinner组件的具体实现函数,注意要把Text类型组件赋值为null*/
private View createMeetingLengthSpinner() {meetingLengthSpinner = new Spinner(this);meetingLengthSpinner.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));meetingLengthSpinner.setPrompt(this.getString(R.string.length_of_meeting));ArrayAdapter<?> adapter = ArrayAdapter.createFromResource(this,R.array.meeting_lengths, android.R.layout.simple_spinner_item);adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);meetingLengthSpinner.setAdapter(adapter);meetingLengthSpinner.setSelection(getSpinnerPositionFromMeetingLength(meetingLength));meetingLengthEditText = null;return meetingLengthSpinner;
}

standupTimer项目中的布局容器相关推荐

  1. androidstudio新建项目中在布局文件中不显示title的方法

    在androidstudio新建项目的时候,在布局文件里有时候会出现如下情况: 上面的标题栏非常碍眼,要想隐藏标题栏的话,可以在Manifest文件的theme标签里进行配置,自定义一个theme,加 ...

  2. 聊聊 SpringCloud 中的父子容器

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 来源公号:吉姆餐厅ak 概述 在引入 SpringCloud 的项目中会多次创建 Spring 容 ...

  3. android怎么查看方法被谁调用,Android中查看布局文件中的控件(view,id)在哪里被调用(使用)...

    在阅读别人的代码时通常是很痛苦的,有时很想要看一看布局中的控件在哪里被调用了,为之很苦恼 在这里提供一种方法. 复制要查看的控件ID,到R文件中搜索到该ID, 接下来就好办的了,选中ID按下Ctrl鼠 ...

  4. vue怎么vw布局好用_Vue项目中使用vw实现移动端适配-阿里云开发者社区

    我们在vue移动端项目中的适配一般都采用rem,但是rem也不是能兼容所有的终端. 随着viewport单位越来越受到众多浏览器的支持,下面将简单介绍怎么实现vw的兼容问题,用vw代替rem 当我们采 ...

  5. element布局容器大小_element中el-container容器与div布局区分详解

    用于布局的容器组件,方便快速搭建页面的基本结构: el-container:外层容器.当子元素中包含 或 时,全部子元素会垂直上下排列,否则会水平左右排列. el-header:顶栏容器. el-as ...

  6. Android 在布局容器中动态添加控件

    这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...

  7. java servlet 部署到tomcat_如何把spring boot项目部署到tomcat容器中

    把spring-boot项目按照平常的web项目一样发布到tomcat容器下 一.修改打包形式 在pom.xml里设置 war 二.移除嵌入式tomcat插件 在pom.xml里找到spring-bo ...

  8. 解构华为云HE2E项目中的容器技术应用

    本文分享自华为云社区<解构华为云HE2E项目中的容器技术应用>,作者: 敏捷小智. 华为云DevCloud HE2E DevOps实践当中,项目采用Docker技术进行构建部署. 容器技术 ...

  9. 使用element-ui中的container布局容器

    使用container布局容器,最常用的是第六个(自己官网看第六个什么样) 可能有人调整aside的高,始终不能充满屏幕,接下来我说一下我通常用的 1.在App.vue中,style里写: #app ...

最新文章

  1. 的python如何降级_提效降本:蚂蚁金服如何用融合计算改造在线机器学习
  2. python自学网站有哪些-小白如何入门Python? 制作一个网站为例
  3. fckeditor 图片上传 java_ckeditor用fckeditor的文件管理器实现图片上传
  4. 在matlab中进行遥感影像地理坐标的相互转换
  5. 单机 docker 部署fastfds_云服务器使用docker可视化一键部署Wrodpress个人博客,操作简单,适合小白...
  6. 郭慧计算机,机械制图及CAD(高等院校网络教育系列教材)
  7. java children_java构建树形列表(带children属性)
  8. SpringCloud学习笔记(15)----Spring Cloud Netflix之Hystrix Dashboard的使用
  9. codeforce 1260
  10. 使用Pinyin4Swift进行汉字拼音转换
  11. 阿里、腾讯裁员,2022金三银四Android开发该何去何从?
  12. “沉迷单车的追风少年”的2021年年末总结
  13. git rebase命令实际操作记录
  14. 焊缝标注vlx实用程序_机械制图焊缝标注方法!太全了,收藏了
  15. 工具类源码 IP辅助类 验证IP地址或地址段是否有效 验证指定的IP是否有效 即验证IP是否属于某个IP段
  16. 在win10系统安装linux系统,win10系统安装Linux子系统的操作方法
  17. L1 distace、L2 distance,L1 norm、L2 norm,L1、L2范数
  18. pandas 学习汇总10 - 统计:窗口函数rolling,expanding( tcy)
  19. Python ffmpeg视频压缩
  20. http协议之长连接与短连接服务器,长连接短连接

热门文章

  1. Python抓取妹子图,内含福利
  2. 【学习】如何制作手机端html模板(REM的实际应用)
  3. ipad和iphone适配_如何在iPhone和iPad上调节音乐均衡器
  4. 【游戏设计模式】之三 状态模式 有限状态机 Unity版本实现
  5. 数据库优化——为什么要建立联合索引
  6. CentOS 使用个人笔记
  7. 单片机原理及应用(1)--延时1s
  8. 太爽啦,GitHub网站1S变VS Code
  9. DNS over HTTPs分析和威胁检测
  10. 从后台得到webshell十大技巧大汇总