更新时间 修改意见
2016-08-02 陈敏

第5节 Toast

5.1 使用效果

Toast用来向用户弹出一个提示框,然后自动消失,就像这样,

面包机烤好面包后,就腾的一下把面包从面包机里弹出来。而这个控件显示时也像是从面包机里弹出来的,所以取了这个名字-Toast(吐司)。

使用Toast显示消息的时候,即使启动它的Activity并没有显示在屏幕上,Toast提示的消息也会被显示到最前面,让用户看到。例如,

  1. Activity A正通过网络下载一个文件,
  2. 此时用户点击Home回到主界面,又启动了另一个应用的Activity B;现在Activity A不再显示了;
  3. 下载完成后,隐藏起来的Activity A使用Toast给用户一个提示;
  4. 虽然Activity A现在没有显示出来,但是它使用Toast给出的提示,还是会被显示到整个界面的最上面,被用户看到;

5.2 显示原理

这是因为Toast会显示在一个特别的窗口层次上,这个窗口比任何Activity使用的窗口层次更高,更优先的显示到上层。

关于窗口系统具体的原理,我们会在安卓系统的窗口机制相关章节进行介绍。

5.3 使用方式

调用Toast的makeText函数生成一个Toast对象,再调用它的show函数显示出来。makeText有三个参数,第一个是Context对象,第二个是要显示的字符串,第三个是要显示的时长。

  1. 第一个参数Context:是当前Activity运行的上下文环境,也就是它运行时所拥有的各种系统资源。Activity是从Context继承而来的,所以Activity本身就是我们要找的context;
  2. 第二个参数:是要显示的内容;
  3. 第三个参数:显示的时间长短,它只能设置长或短。
    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指定的布局,

  1. 在代码中使用setVisibility()函数,

    ((ViewStub) findViewById(R.id.viewstub_id)).setVisibility(View.VISIBLE);
  2. 在代码中使用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相关推荐

  1. android 重用布局区分控件,【专题分析】布局优化

    [TOC] # 布局优化 布局优化的思想很简单,就是尽量减少布局文件的层级.主要从以下几个方面入手: * 善于重用布局文件 * 使用ViewStub仅在需要时才加载 * 删除无用的控件和布局 * 使用 ...

  2. Android入门(二)——常见布局与控件

    文章目录 一.常见界面布局 1.线性布局 LinearLayout 2.相对布局 RelativeLayout 3.表格布局 TableLayout 4.帧布局 FrameLayout 二.常见界面控 ...

  3. java 控件内布局_Java开发桌面程序学习(二)————fxml布局与控件学习

    JavaFx项目 新建完项目,我们的项目有三个文件 Main.java 程序入口类,载入界面并显示 Controller.java 事件处理,与fxml绑定 Sample.fxml 界面 sample ...

  4. 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 布局的创 ...

  5. 综合使用各种布局和控件创建出计算器界面

    综合使用各种布局和控件创建出计算器界面 Grid layout子控件超出屏幕的一个解决方法 主要是gridlayout的使用(Tablelayout无法实现跨行操作) 有想法的小伙伴也可以用其他的 G ...

  6. qt中创建控件布局以及删除原有布局和控件

    引言 当根据数据来创建控件并布局时,如果数据更新,那么之前创建的控件便需要删除后重新创建布局.该文主要说明将原来的布局和控件删除,重新创建并布局. 示例 先看一下ui文件: 下面是实现代码: void ...

  7. qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示

    ---恢复内容开始--- qt中QHBoxLayout或QVBoxLayout布局内控件的动态生成与显示 打个比方,我现在写个小例子,这个小例子是这样的,整个界面分为俩个部分,分为上半部分和下半部分, ...

  8. 07.移动先行之谁主沉浮----控件之轮流轰炸——布局类控件

    如果移动方向有任何问题请参考===> 异常处理汇总-移动系列(点) 移动先行之谁主沉浮? 带着你的Net飞奔吧! 链接======>(点) 一.布局类控件 Grid.StackPanel. ...

  9. Android中列表框纵向布局,andriod布局常用控件属性..docx

    andriod布局常用控件属性. android:gravity="center_vertical" ?限定它里面的内容要垂直居中显示.?android:layout_gravit ...

最新文章

  1. @Service注解的使用
  2. Appdelegate跳转到指定tabbaritem
  3. pytorch cross_entropy
  4. php 1 2 3 转arry_在PHP语言中使用JSON和将json还原成数组的方法
  5. PCA原理分析和意义(一)
  6. OpenGL中的上下文 理解整理
  7. select * from where 三个条件_VBA学习笔记70: Select语句基础
  8. 理工男最该死的十二个瞬间
  9. 软件设计师备考知识点02
  10. Android初学第87天
  11. 阿里P6+面试:介绍下观察者模式?
  12. 五步搞定Android开发环境部署——非常详细的Android开发环境搭建教程
  13. Cookie自动登录认证
  14. ecshop其他页面判断是智能手机访问也跳转到ECTouch对应手机版页面[有修正]
  15. 站内文案编辑seo关键词优化技巧
  16. vue02(脚手架,部署,helloworld)
  17. 面试和谈薪技巧及如何避开常见的陷阱
  18. git cherry-pick 多分支的代码库,将代码从一个分支转移到另一个分支
  19. 使用PdfSharp从模板生成Pdf文件
  20. 第二证券|七位投资专家指点2023 战略性看好A股 市场将提供更多机会

热门文章

  1. Go-Zero 业务开发军火库
  2. Gradle 通用配置项
  3. SAS 聚类分析—— K-均值聚类
  4. MATLAB利用菲涅尔公式仿真光的折射
  5. 1405:质数的和与积
  6. 2009年 春节联欢晚会50句经典台词
  7. 回声消除(AEC)原理、算法及实战——频域块LMS自适应滤波算法(FDAF)
  8. 西门子PLC如何设NTP网络时间同步(全解)
  9. java自旋锁使用_实例讲解Java 自旋锁
  10. 多重共线性的影响、判定及消除的方法