1.概述:这里所说的不常见只是相对于button,textView等这些非常常见的控件而言,并不是说真的很冷爆冷门。这些控件中有为提高效率的如merge、SurfaceView,也有为简化代码编写的如GridLayout、SearchView,还有指导新式google风格的如Viewpage,ActionBar等。在此做一个总览可按需检取
2.merge:融合标签,这个标签和FrameLayout类似,只能通过重力设置布局(android:layout_gravity),所不同的是merge标签没有布局层。如下图:上面的是框架布局所形成的布局层,下面的是merge标签形成的布局层。我们知道在布局应该劲量减少布局的深度以达到优化内存的目的,merge标签正是这个作用。
小提示:在android xml布局文件中开头大写的标签必定有相对应的视图类,而小写的标签都是功能性的标签如include、fragment。
3.RadioGroup:这其实是一个常用的控件了。这里提一下的原因是他继承自线性布局,所以只能排一行,若想排两行就得另辟蹊径了。
4.RatingBar:评分控件,他继承自ProgressBar,他通过将触摸点对于的进度值转换成分值。
5.Switch:开关控件,继承自CompoundButton,有一个是否选中的状态,其呈现有两个部分,文字和状态图标,这些和CcheckBox都是很类似的,其中CcheckBox也是继承自CompoundButton。
6.Space:空白控件,就是空白的一块。他是一个轻量级的视图,为什么?分析源码可知这个类的onDraw方法什么也不做。所以他比设置一个invisible的控件填充视图空隙是要省资源的多。
7.GridLayout:格子布局,GridLayout能轻松搞定相对或表格布局需复杂实现的功能如计算器,metro风格的界面。你不需要设置子视图的宽高,只需要设置他所处的位置和所跨越的格子,当然你若设置了也是有用的,其中的效果和表格布局一样是一个“长板效应”,即最长(宽)的那个格子决定这行(列)的高(宽)。这里提几个主要的属性:
android:rowCount:格子布局有几行
android:columnCount:格子布局有几列
android:orientation:布局方向
android:layout_column:该格子处于第几列
android:layout_row:该格子处于第几行
android:layout_columnSpan:该格子占据几列
android:layout_rowSpan:该格子占据几行
使用格子布局你可以用这样的思路来使用:把格子布局想象为一个充满布局视图后便另起一行(列)的线性布局。
8.SearchView:搜索控件,其效果是一个可以收缩的控件,也可以通过内容提供者添加搜索历史和搜索建议。在googleplay的搜索功能就是他实现的。
9.SlidingDrawer:滑动抽屉布局,有微信摇一摇摇出妹子后的效果,不过这个控件已经被废弃了,并没有替代的控件。他由两个部分组成,一个是可见部分,一个是隐藏部分(屉子)。可见部分有一个按钮叫handle点击他可以开关抽屉。
10.TabHost:选项卡,虽然没有废弃,但基本上和废弃了差不多。现在实现选项卡功能的方式不可胜计,TabHost的确无优点可言。
11.Gallery:也是一个被废弃了的控件,其替代控件是viewpage。
12.VideoView、MediaController:影音显示和控制控件,VideoView是一个继承自SurfaceView的控件(关于Surface下面还会重点讲下),并内置了播放功能可以简单的实现播放功能。MediaController是一个动态创建的(不要在布局文件中使用。因为他是浮动显示的,像所有的影音软件那样碰下屏幕就在底部显示,过段时间就自动影藏起来)并附加到一个VideoView的控件,他有暂停,播放等功能。
13.日期和时间控件:CalendarView日历,Chronometer计时器,DigitalClock数字时钟,AnalogClock钟表仪器。
14.ViewAnimator:动画切换控件,带动画的视图切换控件,继承自FrameLayout,他有两个动画属性inAnimation/outAnimation来控制进出的现实效果,每次都只能显示一个子视图,你可以通过addView方法添加子视图也可以在布局文件中添加子设图。他的子类有ImageSwitcher,TextSwitcher,ViewSwitcher,这些子类都只能有两个子视图。ViewFlipper也是他的子类,可以添加多个子视图,还可以像幻灯片那样自动播放。
15.AdapterViewFlipper:带适配器的视图幻灯片,只要设置一个设配器便可像幻灯片那样逐一显示。和上面提到的ViewFlipper一样都是可以自动播放的,当然也可以手动控制。
16.StackView:带适配器的堆视图,不是逐一显示而是堆积层叠显示。和AdapterViewFlipper一样都继承自AdapterViewAnimator类。
17.ViewStub:根视图,一个按需动态显示的控件。通过android:layout="@layout/"预设一个布局(只能接收布局文件且ViewStub必须置于ViewGroup内)。再用inflate方法显示。他的优点是可以精确指定视图的位置,他也是一个轻量级的,和Space控件一样他的onDraw方法也是什么也不做。其inflate方法实现的功能是 parent.addView(),所以他的父视图必须是ViewGroup。
18.GestureOverlayView:手势视图控件,其效果如同手写输入法相似,亦可将手势轨迹转换为文件。
19.:表面视图控件,android系统不允许非ui线程直接操作视图,必须通过handle、异步这样的方式更新,但是大量的视图更新(比如游戏)势必造成ui线程的堵塞。SurfaceView是一种非ui线程却能在屏幕绘制的控件,这样直接操作的方式大大提高了程序的响应效率。不仅如此据说这个控件是直接和硬件打交道的,所以速度非常之快。SurfaceView是纵深排序的,他总在所在窗口的后面显示。如果SurfaceView的遮挡物是透明的,每次变化都会重新计算其透明效果这是影响性能的。可以通过SurfaceHolder来访问控制SurfaceView,通过getHolder方法取得SurfaceHolder,SurfaceHolder可以添加SurfaceHolder.Callback回调接口来控制SurfaceView
20.TextureView:纹理视图控件,用于显示内容流,如视频,3d动画。和SurfaceView一样他们都不是在ui线程绘画的,不同的是TextureView有更多的操作,不会像SurfaceView一样创建一个单独的窗体,其实TextureView就是继承自View的控件,只能用于硬件加速上。他通过TextureView.SurfaceTextureListener来获取视图。
21.ZoomButton/ZoomControls:缩放按钮/缩放控制,区别是前者只可以缩或放,后者都可以。
22.TwoLineListItem:用于listview的一种特定格式,它需要两个TextView(ID值为text1,text2),还有一个可选的第三个VIew(ID值为selectedIcon)。
23.DialerFilter:字义是拨号过滤,文档也没有解释。可以通过设置setMode设置模式,主要由数字和信件两种模式的组合。
24.ActionBar可以说是谷歌风格设计的代表。