标签:
Toast
用来向用户弹出一个提示框,然后自动消失,就像这样,
面包机烤好面包后,就腾的一下把面包从面包机里弹出来。而这个控件显示时也像是从面包机里弹出来的,所以取了这个名字-Toast(吐司)。
使用Toast
显示消息的时候,即使启动它的Activity并没有显示在屏幕上,Toast
提示的消息也会被显示到最前面,让用户看到。例如,
Home
回到主界面,又启动了另一个应用的Activity B;现在Activity A不再显示了;Toast
给用户一个提示;Toast
给出的提示,还是会被显示到整个界面的最上面,被用户看到;这是因为Toast
会显示在一个特别的窗口层次上,这个窗口比任何Activity使用的窗口层次更高,更优先的显示到上层。
关于窗口系统具体的原理,我们会在安卓系统的窗口机制相关章节进行介绍。
调用Toast的makeText函数生成一个Toast对象,再调用它的show函数显示出来。makeText有三个参数,第一个是Context对象,第二个是要显示的字符串,第三个是要显示的时长。
Toast.makeText(context, "需要显示的内容", Toast.LENGTH_SHORT).show()
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>
当别的布局文件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>
再来看看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
一层。在布局时少一个层次的包裹,可以增加布局的效率。
这是一个布局的占位符。当一个布局包含了这种标签,它并不会加载这个标签的内容,而是在需要的时候,通过代码来动态加载。
例如,一个布局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>
布局与控件(五)-Toast吐司与布局的抽象标签merge include ViewStub
标签:
原文地址:http://blog.csdn.net/anddlecn/article/details/51566643