布局与控件(五)-Toast吐司与布局的抽象标签merge include ViewStub
更新时间 | 修改意见 |
---|---|
2016-08-02 | 陈敏 |
第5节 Toast
5.1 使用效果
Toast
用来向用户弹出一个提示框,然后自动消失,就像这样,
![](http://res.anddle.com/image/android/toast%E6%95%88%E6%9E%9C.png)
面包机烤好面包后,就腾的一下把面包从面包机里弹出来。而这个控件显示时也像是从面包机里弹出来的,所以取了这个名字-Toast(吐司)。
使用Toast
显示消息的时候,即使启动它的Activity并没有显示在屏幕上,Toast
提示的消息也会被显示到最前面,让用户看到。例如,
- Activity A正通过网络下载一个文件,
- 此时用户点击
Home
回到主界面,又启动了另一个应用的Activity B;现在Activity A不再显示了; - 下载完成后,隐藏起来的Activity A使用
Toast
给用户一个提示; - 虽然Activity A现在没有显示出来,但是它使用
Toast
给出的提示,还是会被显示到整个界面的最上面,被用户看到;
5.2 显示原理
这是因为Toast
会显示在一个特别的窗口层次上,这个窗口比任何Activity使用的窗口层次更高,更优先的显示到上层。
关于窗口系统具体的原理,我们会在安卓系统的窗口机制相关章节进行介绍。
5.3 使用方式
调用Toast的makeText函数生成一个Toast对象,再调用它的show函数显示出来。makeText有三个参数,第一个是Context对象,第二个是要显示的字符串,第三个是要显示的时长。
![](http://res.anddle.com/image/android/Toast%E7%94%A8%E6%B3%95.png)
- 第一个参数Context:是当前Activity运行的上下文环境,也就是它运行时所拥有的各种系统资源。Activity是从Context继承而来的,所以Activity本身就是我们要找的context;
- 第二个参数:是要显示的内容;
- 第三个参数:显示的时间长短,它只能设置长或短。
Toast.LENGTH_SHORT,Toast.LENGTH_LONG。
Toast.makeText(context, "需要显示的内容", Toast.LENGTH_SHORT).show()
/*******************************************************************/
* 版权声明
* 本教程只在CSDN和安豆网发布,其他网站出现本教程均属侵权。
/*******************************************************************/
第6节 布局的抽象标签-merge include ViewStub
include标签、merge标签,以及ViewStub标签是安卓布局使用的抽象标签。它们并不代表某个具体的布局或者控件,而是起布局的辅助作用,提高布局执行的效率和易用性。
例如,对于那些会重复使用到的布局结构,可以它们放到一个单独的layout文件中。当我们在任何要使用这个布局的地方,就通过复用的方法,将它包含到新的布局文件中。
假设下面这个布局结构会被经常的使用,我们就可以将它单独定义到一个独立的布局文件reuse.xml
中
<FrameLayout
android:layout_width="match_parent"android:layout_height="match_parent"><TextView
android:layout_width="match_parent"android:layout_height="match_parent"/></FrameLayout>
6.1 include标签
当别的布局文件main_layout.xml
,要使用上面被独立出来的布局时,就可以用<include/>
标签把这个布局包含进来。在<include/>
标签的layout
属性中,指定要复用的布局的id就可以了。
例如main_layout.xml
使用<include/>
标签,
<LinearLayout
android:layout_width="match_parent"android:layout_height="match_parent"><!--包含复用的布局--><include layout="@layout/reuse"/></LinearLayout>
此时main_layout.xml
实际上,就变成了,
<LinearLayout
android:layout_width="match_parent"android:layout_height="match_parent"><!--include的内容开始--> <FrameLayout
android:layout_width="match_parent"android:layout_height="match_parent"><TextView
android:layout_width="match_parent"android:layout_height="match_parent"/></FrameLayout><!--include的内容结束--></LinearLayout>
6.2 merge标签
再来看看merge标签,将reuse.xml
中的FrameLayout
修改成merge
,
<merge><TextView
android:layout_width="match_parent"android:layout_height="match_parent"/>
</merge>
main_layout.xml
继续使用<include/>
标签,
<LinearLayout
android:layout_width="match_parent"android:layout_height="match_parent"><!--包含复用的布局--><include layout="@layout/reuse"/></LinearLayout>
此时main_layout.xml
实际就变成了,
<LinearLayout
android:layout_width="match_parent"android:layout_height="match_parent"><!--include的内容开始,少了FrameLayout一层--> <TextView
android:layout_width="match_parent"android:layout_height="match_parent"/><!--include的内容结束--></LinearLayout>
与之前相比,少了FrameLayout
一层。在布局时少一个层次的包裹,可以增加布局的效率。
6.3 ViewStub标签
这是一个布局的占位符。当一个布局包含了这种标签,它并不会加载这个标签的内容,而是在需要的时候,通过代码来动态加载。
例如,一个布局main_layout.xml
里面,有一个ProgressBar
,布局被加载时,这个ProgressBar就会被创建出来,
<LinearLayout
android:layout_width="match_parent"android:layout_height="match_parent"><TextView
android:layout_width="match_parent"android:layout_height="wrap_content"android:text="this is a test"/><!--布局被加载时,这个ProgressBar就会被创建出来--> <ProgressBar
android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout
如果我们将ProgressBar
放到一个单独的布局文件progress_layout.xml
当中,
<!--单独放到progress_layout.xml当中-->
<ProgressBar
android:layout_width="wrap_content"android:layout_height="wrap_content"/>
然后main_layout.xml
中使用ViewStub
引用这个布局,
<LinearLayout
android:layout_width="match_parent"android:layout_height="match_parent"><TextView
android:layout_width="match_parent"android:layout_height="wrap_content"android:text="this is a test"/><!--布局被加载时,这个ViewStub不会被创建出来--> <ViewStub
android:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/viewstub_id" --->为ViewStub指定一个ID,方便通过代码找到它android:layout="@layout/progress_layout" --->指定这个ViewStub可以被哪个布局文件的内容代替android:inflatedId="@+id/progress_bar"/> --->为这个ViewStub被代替之后,给代替者一个ID</LinearLayout>
布局被加载时,这个ProgressBar并不会被创建出来。使用如下方式,就可以把ViewStub
,替换成android:layout
指定的布局,
在代码中使用
setVisibility()
函数,((ViewStub) findViewById(R.id.viewstub_id)).setVisibility(View.VISIBLE);
在代码中使用
inflate()
函数,((ViewStub) findViewById(R.id.viewstub_id)).inflate();
替换之后,ViewStub
就被从布局当中移除了,这个布局就变成了,
<LinearLayout
android:layout_width="match_parent"android:layout_height="match_parent"><TextView
android:layout_width="match_parent"android:layout_height="wrap_content"android:text="this is a test"/><!--布局被加载时,这个ProgressBar就会被创建出来--> <ProgressBar
android:inflatedId="@+id/progress_bar"android:layout_width="wrap_content"android:layout_height="wrap_content"/></LinearLayout>
/*******************************************************************/
* 版权声明
* 本教程只在CSDN和安豆网发布,其他网站出现本教程均属侵权。
*另外,我们还推出了Arduino智能硬件相关的教程,您可以在我们的网店跟我学Arduino编程中购买相关硬件。同时也感谢大家对我们这些码农的支持。
*最后再次感谢各位读者对安豆
的支持,谢谢:)
/*******************************************************************/
布局与控件(五)-Toast吐司与布局的抽象标签merge include ViewStub相关推荐
- android 重用布局区分控件,【专题分析】布局优化
[TOC] # 布局优化 布局优化的思想很简单,就是尽量减少布局文件的层级.主要从以下几个方面入手: * 善于重用布局文件 * 使用ViewStub仅在需要时才加载 * 删除无用的控件和布局 * 使用 ...
- Android入门(二)——常见布局与控件
文章目录 一.常见界面布局 1.线性布局 LinearLayout 2.相对布局 RelativeLayout 3.表格布局 TableLayout 4.帧布局 FrameLayout 二.常见界面控 ...
- java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习
JavaFx项目 新建完项目,我们的项目有三个文件 Main.java 程序入口类,载入界面并显示 Controller.java 事件处理,与fxml绑定 Sample.fxml 界面 sample ...
- Android 开发 -- 开发第一个安卓程序、Android UI开发(布局的创建:相对布局和线性布局、控件单位:px pt dp sp、常用控件 、常见对话框、ListView)
文章目录 1. 开发第一个Hello World程序 1.1 开发程序 1.2 认识程序中的文件 1.3 Android程序结构 1.4 安卓程序打包 2. Android UI开发 2.1 布局的创 ...
- 综合使用各种布局和控件创建出计算器界面
综合使用各种布局和控件创建出计算器界面 Grid layout子控件超出屏幕的一个解决方法 主要是gridlayout的使用(Tablelayout无法实现跨行操作) 有想法的小伙伴也可以用其他的 G ...
- qt中创建控件布局以及删除原有布局和控件
引言 当根据数据来创建控件并布局时,如果数据更新,那么之前创建的控件便需要删除后重新创建布局.该文主要说明将原来的布局和控件删除,重新创建并布局. 示例 先看一下ui文件: 下面是实现代码: void ...
- qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示
---恢复内容开始--- qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示 打个比方,我现在写个小例子,这个小例子是这样的,整个界面分为俩个部分,分为上半部分和下半部分, ...
- 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件
如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 移动先行之谁主沉浮? 带着你的Net飞奔吧! 链接======>(点) 一.布局类控件 Grid.StackPanel. ...
- Android中列表框纵向布局,andriod布局常用控件属性..docx
andriod布局常用控件属性. android:gravity="center_vertical" ?限定它里面的内容要垂直居中显示.?android:layout_gravit ...
最新文章
- @Service注解的使用
- Appdelegate跳转到指定tabbaritem
- pytorch cross_entropy
- php 1 2 3 转arry_在PHP语言中使用JSON和将json还原成数组的方法
- PCA原理分析和意义(一)
- OpenGL中的上下文 理解整理
- select * from where 三个条件_VBA学习笔记70: Select语句基础
- 理工男最该死的十二个瞬间
- 软件设计师备考知识点02
- Android初学第87天
- 阿里P6+面试:介绍下观察者模式?
- 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
- Cookie自动登录认证
- ecshop其他页面判断是智能手机访问也跳转到ECTouch对应手机版页面[有修正]
- 站内文案编辑seo关键词优化技巧
- vue02(脚手架,部署,helloworld)
- 面试和谈薪技巧及如何避开常见的陷阱
- git cherry-pick 多分支的代码库,将代码从一个分支转移到另一个分支
- 使用PdfSharp从模板生成Pdf文件
- 第二证券|七位投资专家指点2023 战略性看好A股 市场将提供更多机会