参考:http://android.xsoftlab.net/reference/android/view/View.html
public class
View
extends Object
implements Drawable.Callback KeyEvent.Callback AccessibilityEventSource
Added in API level 1
java.lang.Object
↳ android.view.View
已知直接子类
AnalogClock
ImageView
KeyboardView
MediaRouteButton
ProgressBar
Space
SurfaceView
TextView
TextureView
ViewGroup
ViewStub
【概述】
Android的UI界面都是由View和ViewGroup及其派生类组合而成的。
其中,View是所有UI组件的基类,而 ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的子类。
View类是用户接口的基础构件。
View 表示屏幕上的一块矩形区域,负责绘制这个区域和事件处理。
可以说View类是用户接口类中最重要的一个类。
View对象是Android平台中用户界面体现的基础单位。
View类是它称为“widgets(工具)”的子类的基础,它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。
ViewGroup类同样为其被称为“Layouts(布局)”的子类奠定了基础,它们提供了象流式布局、表格布局以及相对布局之类的布局架构。
一般来说,开发Android应用程序的UI界面都不会直接使用View和ViewGroup,而是使用这两 大基类的派生类。
【使用视图】
在窗口中所有View排列在一个树里。您可以通过代码或指定一个View树的一个或多个XML布局文件来添加View。
一旦您创建了一个View树,通常有一些您可能希望执行的常用操作:
·设置属性:例如设置TextView的文本。在view的不同子类里有不同的可用属性和方法;
·设置焦点:框架将处理移动焦点来响应用户输入。把输入焦点放在调用requestFocus()方法的控件上。
·设置监听器:View允许客户制定监听器,当发生了某些事件时得到通知。例如,所有的View会让你设置一个监听器,当View获得或失去焦点时得到通知。你可以使用setOnFocusChangeListener
(android.view.View.OnFocusChangeListener)注册一个监听器。其他View子类提供了更多的专用监听器。例如,Button暴露了一个监听器,当Button被单击时通知客户。
·设置可见性:你可以使用setVisibility(int)来隐藏或显示视图。
注意:Android框架负责测量、布局和绘制视图。你不应该调用视图上执行这些操作的方法,除非你实际上是实现ViewGroup。
【实现一个自定义View】
要实现一个自定义的视图,你通常会从提供重写一些标准框架来绘制视图的方法来开始。你不需要覆盖所有这些方法。事实上,你可以首先重写onDraw(android.graphics.Canvas)。
创建 构造函数 构造函数的一种形式,被称为从代码创建视图时,一种被称为视图填充时的布局文件,第二种形式解析和应用布局文件中定义的任何属性。
onFinishInflate() 命名一个视图和所有子视图已经从XML文件填充。
布局 onMeasure(int, int) View会调用此方法,来确认自己及所有子对象的size
onLayout(boolean, int, int, int, int) 当View要为所有子对象分配大小和位置时,调用此方法
onSizeChanged(int, int, int, int) 当View的size发生了变化的时候,调用此方法
绘制 onDraw(android.graphics.Canvas) 当View需要呈现内容的时候,调用此方法
事件 onKeyDown(int, KeyEvent) 当按键按下时,调用此方法
onKeyUp(int, KeyEvent) 当按键松开时,调用此方法
onTrackballEvent(MotionEvent) 当滚动轨迹球时,调用此方法
onTouchEvent(MotionEvent) 当触摸屏幕时,调用此方法
提示:在模拟器运行状态下,可以通过F6键打开模拟器的轨迹球,然后便可以通过鼠标的移动来模拟轨迹球事件。
焦点 onFocusChanged(boolean, int, android.graphics.Rect) 当View获取或失去焦点时,调用此方法
onWindowFocusChanged(boolean) 当包含View的窗口获取或失去焦点时,调用此方法
附加 onAttachedToWindow() 当View附加到一个窗口上时,调用
onDetachedFromWindow() 当View从窗口脱离时,调用
onWindowVisibilityChanged(int) 当包含View的窗口的可见性发生了变化时,调用此方法
onMeasure(int,int)是测量本View和子View的size,
而onLayout(boolean,int,int,int,int)是分配子View的size, position,
而onDraw(canvas)是渲染本View的content.
【ID】
View可以设置一个整数id。这些id通常是分配在布局的XML文件里,并用于在视图树里查找指定的视图。
常见模式:
·在布局文件中定义一个按钮并为其分配一个唯一的id。
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
·在Activity的onCreate方法里,找到按钮。
Button myButton = (Button) findViewById(R.id.my_button);
View ID不需要独特的树,但至少确保他们在搜索树里是个好做法。
【位置】
视图的几何形状是矩形。视图的位置,表示为一对左和上的坐标;两个维度,表示为一个宽度和一个高度。
可以通过调用方法getleft()和gettop()来获取视图的位置。前者返回左部或者X坐标,后者返回上部或者Y坐标。
这些方法返回的位置都是相对于它的父视图。例如,当getleft()返回20,意味着视图位于父视图左边缘的右边20像素处。
此外,提供一些便利的方法避免不必要的计算。即getright()和getbottom()。这些方法返回表示视图矩形的右部和底部边缘的坐标。例如,调用getright()类似下面的计算:getleft() + getwidth()。
(更多宽度信息可查看Size)
【尺寸,外间距,内间距】
视图的size用width和height来表示。一个视图实际上拥有两对width和height值。
第一对被称为测量宽度和测量高度。这组维度定义申明其希望在父容器中获得多大的空间(见布局更多细节)。测量尺寸可以通过调用getMeasuredWidth()和getMeasuredHeight()来获得。
第一对宽高指离父容器的距离,可以用getMeasuredWidth() and getMeasuredHeight()获得.
第二对是通常讲的宽和高,或者称为绘制宽度和绘制高度。这些尺寸表明了视图在屏幕上绘制时和布局后的实际大小。测量尺寸的大小和绘制尺寸的大小可能不一样。宽度和高度可以通过调用getWidth()和getHeight()获得。
第二对宽高指自己的,可以用getWidth() and getHeight()获得.
测量尺寸时,视图会将padding计算在内。padding值通过left,top,right,bottom表达,设置padding可以用于指定视图内容的偏移量。通过调用setPadding(int, int, int, int) 或者setPaddingRelative(int, int, int, int)进行设置,并通过getPaddingLeft(), getPaddingTop(), getPaddingRight(), getPaddingBottom(), getPaddingStart(), getPaddingEnd()查询。
视图支持通过硬编码设置一个内边padding,但不支持以硬编码方式设置外边margin。不过, 视图组ViewGroup提供了相应的方式。可以查看ViewGroup的ViewGroup.MarginLayoutParams获取更多内容。
【布局】
Android画的操作是由Framework层来进行处理的,整个draw是从根View开始的,ViewGroup向子View发出draw的请求,然后子View负责自己重画它们的invalid区域。Drawing一个Layout必须通过两个步骤:
1. 测量。measure() 从根节点到叶子节点依次测量,这样每个View都会存有各自的dimension.在我们的程序种我们可以重写onMeasure来设置更为精确的content大小,重写完后必须调用setMeasureDimension来存储View的宽和高 。
2.布局。layout也是从父节点到子节点,父节点根据刚才传递进来的measure信息来拜访它们的子节点。
当一个视图的measure()方法返回时,它的getMeasuredWidth()和getMeasuredHeight() 值必须被设置,以及所有这个视图子节点的值。一个view的measure的宽度和高度值必须符合父视图的限制。这确保在度量过程之后,所有父节点接受所有它们的子节点的度量值。一个父视图可能会在其子视图上多次调用measure()方法。比如,父视图可能会通过未指定的尺寸调用measure来找到它们的大小,然后使用实际数值再次调用measure(),如果所有子视图未做限制的尺寸总合过大或过小(也即是,如果子视图之间不能对各自占据的空间达成共识的话,父视图将会干预并且使用第二个过程的规则)。
View.MeasureSpec类用于子View告诉父View它们想如何被测量和怎么放置。而LayoutParams基类只是描述的View的宽和高时多少。对于每一个区域,它可以指定如下值:
·一个确切的数值
·MATCH_PARENT,视图想和父视图一样大(减掉padding)
·WRAP_CONTENT,视图只想有刚好包裹其内容那么大(加上padding)
对于不同的ViewGroup子类,有相应的LayoutParams子类。例如,AbsoluteLayout LayoutParams有自己的子类添加一个X和Y值。
View.MeasureSpec类封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。
MeasureSpec可以是下面三种模式之一:
• UNSPECIFIED:父视图来决定其子视图的理想尺寸。比如,一个线性布局可能在它的子视图上调用
measure()on its child,通过设置其高度为UNSPECIFIED 以及一个宽度为EXACTLY 240,来找出这个子视图在给定240像素宽度的情况下需要显示多高。
• EXACTLY:父视图用来给子视图强加一个准确的尺寸。子视图必须使用这个大小,并确保其所有的后代将
适合这个尺寸。
• AT_MOST:这被父视图用来给子视图强加一个最大尺寸。子视图必须确保它自己以及所有的后代都适合这
个尺寸。
调用requestLayout()发起布局。
【绘制】Drawing
绘制按照视图树的顺序执行。视图绘制时会先绘制子控件。如果视图的背景可见,视图会在调用onDraw函数之前绘制背景。强制重绘,可以使用invalidate()。
【事件处理和线程】Event Handing and Threading
一个视图的生命周期如下:
·事件分配给相应视图,视图处理它,并且通知相关监听器
·在处理事件的过程中,如果视图的发生尺寸变化,那么View会调用requestLayout(),向父控件请求再次布局。
·类似地,当视图的可见性发生了变化,那么需要调用invalidate(),请求重绘。
·不管requestLayout()或invalidate()被调用,框架都会对视图重新测量、布局、绘制。
注意:整个视图树是在单线程内操作,直接调用其他视图的方法必须在UI线程里。
跨线程操作必须使用句柄Handler。
【焦点操作】Focus Handing
框架会处理常规的焦点移动来响应用户输入。包括试图移动或隐藏或新视图可见时改变焦点。
isFocusable(): 获知视图能否接受焦点;
setFocusable(boolean): 设置视图能否接受焦点;
isFocusableInTouchMode() 触摸模式下,获知视图能否接受焦点;
setFocusableInTouchMode(boolean) 触摸模式下,设置视图能否接受焦点
焦点移动基于就近算法。在极少情况下,默认的算法可能不符合开发者的预想要求,在这种情况下,可以通过在xml布局文件中设置如下四个属性来明确定义属性指向:
nextFocusDown
nextFocusLeft
nextFocusRight
nextFocusUp
视图请求焦点可以使用requestFocus()。
【触摸模式】Touch Mode
当用户操作方向键时最好是活的焦点的组件一些动作来提示用户哪个组件获得了焦点。当设备拥有触摸功能时,用古可以通过触摸来选定组件。这个模式叫做”Touch Mode”。
在一个有触摸能力的设备中,一旦用户触摸了屏幕,设备就会进入到"touch mode"。
只有isFocusableInTouchMode()为true的组件才可以激活焦点,比如editing组件,其他的比如buttons不会获得焦点,它只关心点击操作。任何时候用户点击了方向键,设备就会退出touch模式而进入到按键模式
可以在Activitys中通过isInTouchMode()方法来确定设备是否在触摸模式中。
【滚动】Scrolling
框架对期望在内部滚动其内容的视图提供了基本的支持,包括跟踪X和Y的滚动偏移来画滚动条。
更多细节可以查看scrollBy(int, int), scrollTo(int, int)和awakenScrollBars()。
【标签】Tags
与ID不同,标签不是用来识别视图的。标签本质上是可以关联到视图上的额外信息。通常用来方便在视图中存储与视图相关的数据,而不是存放在独立的结构中。
【属性】
视图类暴露ALPHA属性,以及几个变换相关的属性,如translation_x和translation_y。这些属性可以在产权形式以及名称类似的setter/getter方法。这些属性可以用于设置与这些视图相关的渲染相关属性关联的持久性状态。属性和方法也可用于结合动画。
【动画】Animation
从Android 3.0开始,动画视图的首选方法是使用android.animation这些Animator基类改变实际视图对象的属性,如alpha和translationX,对比3.0之前的Animation基类,不再只显示视图是如何绘制的。特别是ViewPropertyAnimator类使得这些视图动画属性特别容易和高效。
你可以使用setAnimation(Animation)或startAnimation(Animation)来将动画对象附加到一个视图。动画可以改变缩放、旋转、位移和透明度的属性。
【安全】Secunrity
大部分时候应用应该可以确认动作所需要的所有内容比如获得访问的权限,购买东西以及点击广告链接。
不幸的是,一些恶意的应用会视图欺骗用户去操作这些动作,用户不经意的就会操作隐藏在view后面的动作。作为一种补救,框架提供了一种轻的过滤框架来提高比较敏感模块的安全性。
可以通过setFilterTouchesWhenObscured(boolean)或则android:filterTouchesWhenObscured来启用过滤机制。启用后,框架会在用户启动另外一个view的时候锁定原先的view。比如当有警告,对话或其他视窗在view上面展示时就不在允许点击view了。在更小的控制颗粒度下。可以重写onFilterTouchEventForSecurity(MotionEvent)来实现你自己的安全策略。
也可以查看FLAG_WINDOW_IS_OBSCURED.
【总结】
【嵌套类】
类 View.AccessibilityDelegate API 14
类 View.BaseSavedState API 1
类 View.DragShadowBuilder API 11
类 View.MeasureSpec API 1
接口 View.OnApplyWindowInsetsListener API 20
接口 View.OnAttachStateChangeListener API 12
接口 View.OnClickListener API 1
接口 View.OnContextClickListener API 23
接口 View.OnCreateContextMenuListener API 1
接口 View.OnDragListener API 11
接口 View.OnFocusChangeListener API 1
接口 View.OnGenericMotionListener API 12
接口 View.OnHoverListener API 14
接口 View.OnKeyListener API 1
接口 View.OnLayoutChangeListene API 11
接口 View.OnLongClickListener API 1
接口 View.OnScrollChangeListener API 23
接口 View.OnSystemUiVisibilityChangeListener API 11
接口 View.OnTouchListener API 1
【XML属性】
android:accessibilityLiveRegion API 19
关联方法:setAccessibilityLiveRegion(int)
属性说明:指示在该视图更改时是否应通知用户可访问性服务。辅助功能
none 0 ACCESSIBILITY_LIVE_REGION_NONE 不通知
polite 1 ACCESSIBILITY_LIVE_REGION_POLITE 通知
assertive 2 ACCESSIBILITY_LIVE_REGION_ASSERTIVE 打断语音并通知
android:accessibilityTraversalAfter API 22
关联方法:setAccessibilityTraversalAfter(int)
属性说明:在可访问性遍历之后,设置视图的id。屏幕阅读器必须访问其他视图的内容之前的内容。辅助功能
android:accessibilityTraversalBefore API 22
关联方法:setAccessibilityTraversalBefore(int)
属性说明:在可访问性遍历之前,设置视图的id。屏幕阅读器必须访问其他视图的内容之前的内容。辅助功能
android:alpha API 11
关联方法:setAlpha(float)
属性说明:视图透明度,值在0-1之间。0为完全透明,1为完全不透明。
android:background API 1
关联方法:setBackgroundResource(int)
属性说明:设置视图背景。可以是完整的drawable资源(比如png图、.9图、xml描述状态列表等等)或者是纯色。
设置背景图片,图片来源于drawable;
.setBackgroundDrawable(getResources().getDrawable(R.drawable.a));
转换字符串为int(颜色);
.deleteFilghtBg.setBackgroundColor(Color.parseColor("#FF0000"));
可以通过以下两种方法设置背景为透明:"@android:color/transparent"和"@null"。注意TextView默认是透明的,不用写此属性,但是Buttom/ImageButton/ImageView想透明的话就得写这个属性了。
android:backgroundTint API 21
关联方法:setBackgroundTintList(ColorStateList)
属性说明:将背景渲染成指定的颜色。即设置背景色调。
如果view没有背景,设置backgroudTint无效。
getResource().getColorStateList(R.color.色值);
ColorStateList对象可以在XML中定义,像color一样使用,它能根据它应用到的View对象的状态实时改变颜色。
<selector xmlns:android="http://schemas.android.com/apk/res/android" > //根元素。包含一个或多个<item>元素。
<item>定制特定状态的color
android:color 16进制颜色,由RGB值指定,可带Alpha
#RGB #ARGB #RRGGBB #AARRGGBB
android:state_pressed 按下状态
android:state_focused 聚焦状态
android:state_selected 选中状态
android:state_active
android:state_checkable 可勾选状态
android:state_checked 勾选状态
android:state_enabled 可用状态(能接受触摸/点击事件)
android:state_window_focused 应用程序窗口有焦点时使用(应用程序在前台)
注意:记住一点,StateList中第一个匹配当前状态的item会被使用。因此,如果第一个item没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后。
android:backgroundTintMode API 21
关联方法:setBackgroundTintMode(PorterDuff.Mode)
属性说明:设置背景渲染的模式。设置背景色调的混合模式。
src_over src_in src_atop multiply screen add
PorterDuff.Mode.CLEAR 0 不绘制
PorterDuff.Mode.SRC 1 显示上层绘制
PorterDuff.Mode.DST 2 显示下层绘制
PorterDuff.Mode.SRC_OVER 3 上下层都显示,上层居上显示
PorterDuff.Mode.DST_OVER 4 上下层都显示,下层居上显示
PorterDuff.Mode.SRC_IN 5 取上层绘制交集
PorterDuff.Mode.DST_IN 6 取下层绘制交集
PorterDuff.Mode.SRC_OUT 7 取上层绘制非交集
PorterDuff.Mode.DST_OUT 8 取下层绘制非交集
PorterDuff.Mode.SRC_ATOP 9 取上层交集部分与下层非交集部分
PorterDuff.Mode.DST_ATOP 10 取下层交集部分与上层非交集部分
PorterDuff.Mode.XOR 11 去除交集部分
PorterDuff.Mode.DARKEN 12 取两层全部区域,交集部分加深
PorterDuff.Mode.LIGHTEN 13 取两层全部区域,交集部分点亮
PorterDuff.Mode.MULTIPLY 14 取交集,显示叠加
PorterDuff.Mode.SCREEN 15 取两层全部区域,交集部分透明
PorterDuff.Mode.ADD 16 取两层全部区域,交集部分叠加
PorterDuff.Mode.OVERLAY 17
如果设置了android:background,那么控件的背景颜色就会直接修改。
如果设置了android:backgroundTint,那么就会将设置的颜色和原来的背景进行一个叠加的过程,至于如何叠加,就是上面的android:backgroundTintMode。
低版本时,需要引入support-V7jar包。并把控件定义为:android.support.v7.widget.AppCompat...
setSupportBackgroundTintList();
setSupportBackgroundTintMode();
android:clickable API 1
如要设置setClickable(false),一定要放在按扭的setOnClickListener事件之后!
因为setOnClickListener事件会去重写View v,也就是会把setClickable设为TRUE!
android:contentDescription API 4
关联方法:setContentDescription(CharSequence)
属性说明: 设置View的备注说明,作为一种辅助功能提供,为一些没有文字描述的View提供内容简述,如ImageButton。这里在界面上不会有效果,自己在程序中控制,可临时放一点字符串数据。
[Accessbility]警告。可以被TalkBack识别,某些程序通过声音来告诉有视觉障碍的用户。
在android控件中没有文本描述的view如果不加android:contentDescription="@string/**"就会有黄色的下划线。
我们可以使用tools:ignore="contentDescription"来忽略这个警告。
android:contextClickable API 23
关联方法:setContextClickable(boolean)
属性说明:设置是否对上下文响应点击事件。
android:drawingCacheQuality API 1
关联方法:setDrawingCacheQuality(int)
auto 0 DRAWING_CACHE_QUALITY_AUTO 默认,由框架决定
low 1 DRAWING_CACHE_QUALITY_LOW 低质量,使用较低的颜色深度,消耗更少的内存
high 2 DRAWING_CACHE_QUALITY_HIGH 高质量,使用较高的颜色深度,消耗更多的内存
android:duplicateParentState API 1
属性说明:重复父状态。
isDuplicateParentStateEnabled()
如果设置此属性为true,将直接从父容器中获取绘图状态(焦点,按下等)。仅仅是获取绘图状态,而没有获取事件,也就是你点一下LinearLayout时Button有被点击的效果,但是不执行点击事件。
就是父控件响应点击事件,子View不响应点击事件,但是颜色要随着点击而发生变化。
android:elevation API 21
关联方法:setElevation(float)
属性说明:设置View的深度z。组件浮起来的高度。阴影。
关联方法:setScrollbarFadingEnabled(boolean)
属性说明: 定义在ScrollBar没有使用时,是否褪色(隐藏)。默认为true。
如果将其设置为false,那么只要能够滚动,滚动条就会一直显示,不会隐藏。但如果View全部显示完成,不能滚动,则不会显示。
此外,如果配置了android:scrollbarTrackVertical,也就是滚动条的Track,然后设置fadeScrollbars为不隐藏滚动条,那么不仅滚动条不会隐藏,滚动条的Track同样也不会隐藏。
android:fadingEdgeLength API 1
关联方法:getVerticalFadingEdgeLength()
属性说明:设置边框渐变的长度。
android:filterTouchersWhenObscured API 9
关联方法:setFilterTouchesWhenObscured(boolean)
属性说明:所在窗口被其它可见窗口遮住时,是否过滤触摸事件。
android:fitsSystemWindows API 1
关联方法:setFitsSystemWindows(boolean)
属性说明:设置布局调整时是否考虑系统窗口(如状态栏)
经过具体实验,具体的作用就是你的contentview是否忽略actionbar,title,屏幕的底部虚拟按键,将整个屏幕当作可用的空间。
正常情况,contentview可用的空间是去除了actionbar,title,底部按键的空间后剩余的可用区域;这个属性设置为true,则忽略,false则不忽略
android:focusable API 1
关联方法:setFocusable(boolean)
若有requestFocus()被调用时,后者优先处理。
android:focusableInTouchMode API 1
关联方法:setFocusableInTouchMode(boolean)
属性说明:在触摸模式下配置是否可以获得焦点。
focusable是切换得到的焦点,focusableInTouchMode是手指点击获得焦点
android:foreground API 1
关联方法:setForeground(Drawable)
属性说明:设置前景色/背景图片。
android:foregroundGravity API 1
关联方法:setForegroundGravity(int)
Defines the gravity to apply to the foreground drawable.
top、bottom、left、right、center、center_vertical、centet_horizontal、
fill(填充)、fill_vertical(垂直方向填充)、fill_horizontal(水平方向填充)、
clip_vertical(垂直方向剪裁)、clip_horizontal(水平方向剪裁)。
android:foregroundTint API 21
关联方法:setForegroundTintList(ColorStateList)
属性说明:将前景渲染成指定的颜色。即设置前景色调。
android:foregroundTintMode API 21
关联方法:setForegroundTintMode(PorterDuff.Mode)
属性说明:设置前景渲染的模式。设置前景色调的混合模式。
src_over
src_in
src_atop
multiply
screen
add
android:hapticFeedbackEnabled API 3
关联方法:setHapticFeedbackEnabled(boolean)
属性说明: 设置触觉反馈是否启用。启用后在点击等事件时会有震动等反馈效果。
HAPTIC_FEEDBACK_ENABLED
android:id API 1
属性说明:设置组件ID,稍后可通过View.findViewById()或Activity.findViewById()来检索。
给当前View设置一个在当前layout.xml中的唯一编号,不同的layout.xml之间定义相同的id不会冲突。
android:importantForAccessibility API 16
关联方法:setImportantForAccessibility(int)
属性说明:设置View的可访问性的重要性。
auto IMPORTANT_FOR_ACCESSIBILITY_AUTO
yes IMPORTANT_FOR_ACCESSIBILITY_YES
no IMPORTANT_FOR_ACCESSIBILITY_NO
noHideDescendants IMPORTANT_FOR_ACCESSIBILITY_NO_HIDE_DESCENDANTS
android:isScrollbarsContainer API 3 滚动集合 true false
关联方法:SetScrollContainer(boolean)
属性说明:设置View如果将作为滚动容器,是否可以调整大小。
关联方法:setKeepScreenOn(boolean)
属性说明: 视图在可见的情况下是否保持唤醒状态。
关联方法:setLayerType(int,Paint)
属性说明: 设置指定层的类型。
none 0 LATER_TYPE_NONE 不为这个View树建立单独的layer
software 1 LAYER_TYPE_SOFTWARE 在Bitmap上对View进行软渲染
hardware 2 LAYER_TYPE_HARDWARE 在Framebuffer Object上做渲染
两者区别:
1、一个是渲染到Bitmap,一个是渲染到FB上。
2、hardware可能会有一些操作不支持。
两者相同:
都是开了一个buffer,把View画到这个buffer上面去。
android:layoutDirection API 17
关联方法:setLayoutDirection(int)
属性说明: 定义布局图纸的方向。 ltr rtl inherit locale
ltr LATOUT_DIRECTION_LTR Left-to-Right 从左到右
rtl LATOUT_DIRECTION_RTL Right-to-Left 从右到左
inherit LATOUT_DIRECTION_INHERIT 继承
locale LATOUT_DIRECTION_LOCALE 区域设置
Android:longClickable API 1
关联方法:setLongClickable(boolean)
属性说明:设置是否响应长按事件
如果同时设置了onClick和onLongClick事件,那么默认情况下长按时两个方法都会被调用
可以再onLongClick事件执行完毕后return true;表示事件已经被处理,这样就不会调用onClick事件了
android:minHeight API 1
属性说明:设置视图的最小高度。
android:minWidth API 1
关联方法:setMiniWidth(int)
属性说明:设置视图的最小宽度。
焦点移动是基于一个在给定方向查找最近邻居的算法。如果指定视图不存在,移动焦点时将报运行时错误。可以设置imeOptions= actionDone,这样输入完即跳到下一个焦点。
关联方法:setNextFocusLeftId(int)
属性说明: 向左移动焦点时,下一个获取焦点的view的id
android:nextFocusRight API 1
关联方法:setNextFocusRightId(int)
属性说明: 向右移动焦点时,下一个获取焦点的view的id
android:nextFocusUp API 1
android:nextFocusDown API 1
关联方法:setNextFocusDownId(int)
属性说明: 向下移动焦点时,下一个获取焦点的view的id
android:nextFocusForward API 11
关联方法:setNextFocusForwardId(int)
属性说明:点击时从上下文中调用指定的方法。
android:padding API 1
关联方法:setPaddingRelative(int,int,int,int) 参数:left,top,right,bottom
属性说明:设置所有四个边的填充像素。
android:paddingTop API 1
关联方法:setPaddingRelative(int,int,int,int)
属性说明:设置上边的填充像素。
android:paddingBottom API 1
关联方法:setPaddingRelative(int,int,int,int)
属性说明:设置下边的填充像素。
android:paddingLeft API 1
关联方法:setPaddingRelative(int,int,int,int)
属性说明:设置左边的填充像素。
android:paddingRight API 1
关联方法:setPaddingRelative(int,int,int,int)
属性说明:设置右边的填充像素。
android:paddingStart API 17
关联方法:setPaddingRelative(int,int,int,int)
属性说明:设置开始处的填充像素。
android:paddingEnd API 17
关联方法:setPaddingRelative(int,int,int,int)
属性说明:设置结尾处的填充像素。
android:paddingLeft和android:paddingStart的区别:
有的语言是按照从右往左的顺序来书写的。在Android 4.2系统之后,Google在Android中引入了RTL布局,更好了支持了由右到左文字布局的显示,为了更好的兼容RTL布局,google推荐使用Start和End来替代Left和Right,这样应用可以在正常的屏幕和由右到左显示文字的屏幕上都保持一致的用户体验。
android:fadingEdge API 1,API 14
属性说明:设置拉滚动条时 ,边框渐变的方向 none horizontal vertical
android:requiresFadingEdge API 14
关联方法:setVerticalFadingEdgeEnabled(boolean)
属性说明: 定义滚动时边缘是否褪色 。 none horizontal vertical
android:rotation API 11
关联方法:setRotation(float)
属性说明: 设置旋转度数。
android:rotationX API 11
关联方法:setRotationX(float)
属性说明: 水平旋转度数。
android:rotationY API 11
属性说明: 垂直旋转度数。
关联方法: setSaveEnabled(boolean)
属性说明:设置是否在窗口冻结时(如旋转屏幕)保存View的数据,如果你的view有id,那默认系统就会帮你保存。
android:scaleX API 11
关联方法:setScaleX(float)
属性说明: 设置X轴缩放。水平方向缩放比例。
android:scaleY API 11
关联方法:setScaleY(float)
属性说明: 设置Y轴缩放。竖直方向缩放比例。
android:scrollIndicators API 23
关联方法:setScrollIndicators(int)
属性说明:设置当View滚动时,显示的滚动指标。
none top bottom left right start end
属性说明:以像素为单位设置水平方向滚动的的偏移值。x方向的滚动偏移。即在水平方向滚动了多少距离。
android:scrollY API 1
属性说明:以像素为单位设置垂直方向滚动的的偏移值。y方向的滚动偏移。即在竖直方向滚动了多少距离。
android:scrollbarsAlwaysDrawHorizontalTrack API 1
属性说明:表示是否总是显示水平滚动条的滚动轨道(Track),默认为false。
android:scrollbarsAlwaysDrawVerticalTrack API 1
属性说明:表示是否总是显示垂直滚动条的滚动轨道(Track),默认为false。
通常,如果设置了滚动条的Track,那么Track会随着滚动条一起显示和隐藏。
但如果设置了android:scrollbarAlwaysDrawVerticalTrack为true,则滚动条的Track将一直显示,不会隐藏。
当然,如果没有配置android:scrollbarTrackVertical,即使设置了android:scrollbarAlwaysDrawVerticalTrack为true,也不会有Track显示。
此外,android:fadeScrollbars配置为false,则无论android:scrollbarAlwaysDrawVerticalTrack配置为true还是false,Track都不会隐藏。
android:scrollbarsDefaultDelayBeforeFade API 5
关联方法:setScrollBarDefaultDelayBeforeFade(int)
属性说明:表示滚动条从显示到隐藏的间隔时间,单位为毫秒,如果不设置,默认为300毫秒。
android:scrollbarsFadeDuration API 5
关联方法:setScrollBarFadeDuration(int)
属性说明:表示滚动条从滚动条开始隐藏到完全隐藏的间隔时间,单位为毫秒,如果不设置,默认为250毫秒。
android:scrollbarsSize API 1
属性说明:设置滚动条的尺寸。即垂直滚动条的宽度、水平滚动条的高度。
关于此项配置需要注意的是,如果android:scrollbarThumbVertical配置的是一个.9.png的图片(自身有宽度的Drawable),那么android:scrollbarSize配置会被忽略,只有android:scrollbarThumbVertica配置的是颜色值或者xml时(自身宽度为0的Drawable),此项配置才会有效。
android:scrollbarsStyle API 1
属性说明:设置滚动条的风格和位置。 也是用来设置滚动条的位置,不过不是左右位置,而是混动条和内容之间的相对位置。共4组值:insideOverlay(内贴图) insideInset(内插图) outsideOverlay(外贴图) outsideInset(外插图)
对一个View来说,它的内部可用区域是View自身大小再减去padding后的区域。
insideOverlay(内贴图) 表示滚动条和View可用区域对齐,且覆盖在View之上
insideInset(内插图) 表示滚动条和View可用区域对齐,但不覆盖在View之上,而是将View挤到滚动条内
outsideOverlay(外贴图) 表示滚动条和View可用区域对齐,且覆盖在padding之上
outsideInset(外插图) 表示滚动条和View可用区域对齐,但不覆盖在padding之上,而是将View挤到滚动条内
inside就是滚动条绘制在padding以内;
outside就是不需要绘制在padding以内;
Overlay是贴图,就是直接覆盖在内容的上方,这样内容可能会显示到滚动条下方;
Inset是插图,就是会在对应的padding上加上滚动条的宽度,以不让内容显示到滚动条下面去。
自定义滚动条,设置引用可以是一个颜色值,或者是一个Drawable资源。对Drawable资源可以使用.9的png图片,也可以使用XML来配置。
ScrollBar由两部分组成,一个是Track(滑道),一个是Thumb(滑块),其定制的属性为:
android:scrollbarsThumbHorizontal API 1
android:scrollbarsThumbVertical API 1
属性说明:设置垂直滚动滑块的显示外观drawable对象。
android:scrollbarsTrackHorizontal API 1
属性说明:设置水平滚动条滑动轨道的显示外观drawable对象。
android:scrollbarsTrackVertical API 1
属性说明:设置垂直滚动条滑动轨道的显示外观drawable对象。
属性说明:设置可显示的滚动条。
horizontal
vertical
如果scrollbars设置成none,那么其他的滚动条相关的配置都不会有效果。
android:soundEffectsEnabled API 1
关联方法:setSoundEffectsEnabled(boolean)
android:stateListAnimator API 21
属性说明:给View设置state-based animator
关联方法:setTag(Object)
属性说明:设置文本标签。稍后可用View.gatTag()或View.findViewWithTag()来检索。
View.gatTag()获取该字符串
View.findViewWithTag()查找该组件
android:tag与android:id的区别:
Id的查找速度更快。只要不在同一个父控件中,tag可以又相同的名字。
Tag不像ID是用标示view的。Tag从本质上来讲是就是相关联的view的额外的信息。它们经常用来存储一些view的数据,这样做非常方便而不用存入另外的单独结构。
Tag是string标识。Id是整数标识。
关联方法:setTextAlignment(int)
属性说明: 设置文本的显示对齐方式。
Inherit gravity textStar textEnd center viewStar viewEnd
关联方法:setTextDirection(int)
属性说明:定义文本的布局方向。
Inherit firstStrong anyRtl ltr rtl locale firstStrongLtr firstStrongRtl
android:translationformPivotX API 11
关联方法:setPivotX(float)
属性说明: 相对于一点的水平方向的偏移量。
android:translationformPivotY API 11
属性说明: 相对于一点的垂直方向的偏移量。
android:transitionName API 21
属性说明:命名一个View,以识别能移动。
android:translationX API 11
关联方法:setTranslationX(float)
属性说明:View在x轴的移动距离。
android:translationY API 11
关联方法:setTranslationY(float)
属性说明:View在y轴的移动距离。
android:translationZ API 21
关联方法:setTranslationZ(float)
属性说明:View在z轴的移动距离。这个值被添加到View浮起来的高度(海拔)。
android:visibility API 1
visible 可见,
invisible 不可见,但占用view的空间
gone 不可见,不占用view的空间
【......】
android:verticalScrollbarPosition API 11
属性说明: 设置垂直滚动条的位置。 defaultPosition left right
如果是defaultPosition,则滚动条的位置受到布局RTL配置的影响,如果布局是从右往左,则滚动条显示在left侧,如果布局是从左往右,则滚动条显示在right侧。
注意:滚动条没有上下位置的设置。对于可水平滚动的View(如HorizontalScrollView),滚动条始终在下方。 不能设置到上方。
关联方法:setOverScrollMode(int) API 9
属性说明:滑动到边界时的样式。
always OVER_SCROLL_ALWAYS
ifContentScrolls OVER_SCROLL_IF_CONTENT_SCROLLS
never OVER_SCROLL_NEVER
iOS上的bounce功能给人的感觉很爽,当一个可以滚动的区域被拖到边界时,它允许用户将内容拖过界,放手后再弹回来,以一种非常棒的方式提示了用户边界的存在,是IOS的一大特色。android2.3新增了overscroll功能,听名字就知道应该是bounce功能的翻版,但也许是出于专利方面的考虑,google的默认实现跟IOS有所不同,它只是在list拖到边界处时做了一个发光的动画,个人觉得体验比IOS差远了。而且这个黄色的发光在黑色背景下虽然效果不错,在其它背景下可就难说了,因此很多人想要关掉它。
setOverScrollMode(View.OVER_SCROLL_NEVER)
android:laberFor
属性说明:添加标签