Android不常见系统控件一览

来源:互联网 发布:哪里可以购买淘宝店铺 编辑:程序博客网 时间:2024/05/20 04:10

merge:融合标签,这个标签和FrameLayout类似,只能通过重力设置布局(android:layout_gravity),所不同的是merge标签没有布局层。如下图:上面的是框架布局所形成的布局层,下面的是merge标签形成的布局层。我们知道在布局应该劲量减少布局的深度以达到优化内存的目的,merge标签正是这个作用。

小提示:在android xml布局文件中开头大写的标签必定有相对应的视图类,而小写的标签都是功能性的标签如include、fragment。


RadioGroup:这其实是一个常用的控件了。这里提一下的原因是他继承自线性布局,所以只能排一行,若想排两行就得另辟蹊径了


RatingBar:评分控件,他继承自ProgressBar,他通过将触摸点对于的进度值转换成分值


Switch:开关控件,继承自CompoundButton,有一个是否选中的状态,其呈现有两个部分,文字和状态图标,这些和CcheckBox都是很类似的,其中CcheckBox也是继承自CompoundButton


Space:空白控件,就是空白的一块。他是一个轻量级的视图,为什么?分析源码可知这个类的onDraw方法什么也不做。所以他比设置一个invisible的控件填充视图空隙是要省资源的多。


GridLayout:格子布局,GridLayout能轻松搞定相对或表格布局需复杂实现的功能如计算器,metro风格的界面。你不需要设置子视图的宽高,只需要设置他所处的位置和所跨越的格子,当然你若设置了也是有用的,其中的效果和表格布局一样是一个“长板效应”,即最长(宽)的那个格子决定这行(列)的高(宽)。这里提几个主要的属性:

android:rowCount:格子布局有几行

android:columnCount:格子布局有几列

android:orientation:布局方向

android:layout_column:该格子处于第几列

android:layout_row:该格子处于第几行

android:layout_columnSpan:该格子占据几列

android:layout_rowSpan:该格子占据几行

使用格子布局你可以用这样的思路来使用:把格子布局想象为一个充满布局视图后便另起一行(列)的线性布局


SearchView:搜索控件,其效果是一个可以收缩的控件,也可以通过内容提供者添加搜索历史和搜索建议。在googleplay的搜索功能就是他实现的。


SlidingDrawer:滑动抽屉布局,有微信摇一摇摇出妹子后的效果,不过这个控件已经被废弃了,并没有替代的控件。他由两个部分组成,一个是可见部分,一个是隐藏部分(屉子)。可见部分有一个按钮叫handle点击他可以开关抽屉


VideoView、MediaController:影音显示和控制控件,VideoView是一个继承自SurfaceView的控件(关于Surface下面还会重点讲下),并内置了播放功能可以简单的实现播放功能。MediaController是一个动态创建的(不要在布局文件中使用。因为他是浮动显示的,像所有的影音软件那样碰下屏幕就在底部显示,过段时间就自动影藏起来)并附加到一个VideoView的控件,他有暂停,播放等功能


日期和时间控件:CalendarView日历,Chronometer计时器,DigitalClock数字时钟,AnalogClock钟表仪器


ViewAnimator:动画切换控件,带动画的视图切换控件,继承自FrameLayout,他有两个动画属性inAnimation/outAnimation来控制进出的现实效果,每次都只能显示一个子视图,你可以通过addView方法添加子视图也可以在布局文件中添加子设图。他的子类有ImageSwitcher,TextSwitcher,ViewSwitcher,这些子类都只能有两个子视图。ViewFlipper也是他的子类,可以添加多个子视图,还可以像幻灯片那样自动播放


AdapterViewFlipper:带适配器的视图幻灯片,只要设置一个设配器便可像幻灯片那样逐一显示。和上面提到的ViewFlipper一样都是可以自动播放的,当然也可以手动控制


StackView:带适配器的堆视图,不是逐一显示而是堆积层叠显示。和AdapterViewFlipper一样都继承自AdapterViewAnimator类


ViewStub:根视图,一个按需动态显示的控件。通过android:layout=”@layout/”预设一个布局(只能接收布局文件且ViewStub必须置于ViewGroup内)。再用inflate方法显示。他的优点是可以精确指定视图的位置,他也是一个轻量级的,和Space控件一样他的onDraw方法也是什么也不做。其inflate方法实现的功能是 parent.addView(),所以他的父视图必须是ViewGroup


GestureOverlayView:手势视图控件,其效果如同手写输入法相似,亦可将手势轨迹转换为文件。


SurfaceView:表面视图控件,android系统不允许非ui线程直接操作视图,必须通过handle、异步这样的方式更新,但是大量的视图更新(比如游戏)势必造成ui线程的堵塞。SurfaceView是一种非ui线程却能在屏幕绘制的控件,这样直接操作的方式大大提高了程序的响应效率。不仅如此据说这个控件是直接和硬件打交道的,所以速度非常之快。SurfaceView是纵深排序的,他总在所在窗口的后面显示。如果SurfaceView的遮挡物是透明的,每次变化都会重新计算其透明效果这是影响性能的。可以通过SurfaceHolder来访问控制SurfaceView,通过getHolder方法取得SurfaceHolder,SurfaceHolder可以添加SurfaceHolder.Callback回调接口来控制SurfaceView


TextureView:纹理视图控件,用于显示内容流,如视频,3d动画。和SurfaceView一样他们都不是在ui线程绘画的,不同的是TextureView有更多的操作,不会像SurfaceView一样创建一个单独的窗体,其实TextureView就是继承自View的控件,只能用于硬件加速上。他通过TextureView.SurfaceTextureListener来获取视图。


ZoomButton/ZoomControls:缩放按钮/缩放控制,区别是前者只可以缩或放,后者都可以。


TwoLineListItem:用于listview的一种特定格式,它需要两个TextView(ID值为text1,text2),还有一个可选的第三个VIew(ID值为selectedIcon)。


DialerFilter:字义是拨号过滤,文档也没有解释。可以通过设置setMode设置模式,主要由数字和信件两种模式的组合。


其次还有ViewPage,ActionBar,PopMenu这些虽然是新控件,但是使用的频率已经越来越高,特别是ActionBar可以说是谷歌风格设计的代表。


0 0
原创粉丝点击