View
基本概念
在创建View后通常会进行如下操作:
- 设置属性
- 设置聚焦,可通过requestFoucs()强调聚焦
- 设置监听器
- 设置可见,使用setVisibility(int)
ID
指定ID
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
根据ID查找View实例
Button myButton = (Button) findViewById(R.id.my_button);
在View Tree中不要求所有View的ID是唯一的,但是在搜索时要保证搜索的区域中ID是唯一的。
position
left top right bottom 相对于父节点。单位是pixel。
size 、padding 、margin
size是长宽,有两种长宽
- width、height又叫drawing width和drawing height。是在绘制时和布局后屏幕上的尺寸。
- measuredWidthmeasuredHeight定义了View的大小。 padding:是内容和边界的距离。可使用setPadding或setPaddingRelative指定,然后通过getPaddingXXX()等方法获取。 View的margin通过布局实现的。View不能控制自己的margin。
layout ???
layout分成两个步骤
- 测量步骤 由measure(int,int)实现,至顶向下遍历view tree。遍历结束后,所有view获取measuresize。
- 布局步骤。在layout(int,int,int,int)时发生,也是至顶向下。本阶段中所有父元素负责根据上一阶段计算的结束,指定子元素的位置。
绘制 ??
通过调用invalidate()强制绘制一个view。
要注意绘制顺序????
事件处理和线程
View基本流程如下:
- 发生事情,并派发到相应的View。View处理事件并通知Listener
- 如果view的bound发生变化,会调用requestLayout()
- 如果view的外观发生变化,会调用ivalidate()
- 无论requestLayout()或invalidate()被调用,UI框架会重新测量、布局。
view的所有方法只能在UIThread中调用,如果想在其他线程中更新view,可使用Handler
Focus Handling
UI框架会处理Focus的常规移动用来响应用户的输入,包括view的移除或隐藏,或者一个新view变成可见。
- isFocusable()判断view是否可聚焦。
- setFocusable(boolean) 设置view是否可聚焦
- isFocusableInTouchMode()
- setFocusableInTouchMode()
focus移动默认是在指定方向上寻找最近的邻居。如果这种方式不是想的。可使用如下XML属性
- nextFocusDown
- nextFocusLeft
- nextFocusRight
- nextFocusUp
想让特定view获取焦点,调用requestFocus()
Touch Mode??
Activity#isInTouchMode()
Scrolling
- scrollBy(int,int)
- scrollTo(int,int)
- awaeknScrollBars()
Tag
不是用来识别view,本质是上一种关联到view上的额外信息。常用来存储和view相关的数据。
Properties??
有一些Property
- ALPHA
- TRANSLATION_X
- TRANSLATION_Y
和动画相关
Animation ??
从Android3.0开始,view的动画优先使用android.animation包中的API。这些基于动画的类改变view的property,如alpha、translation。 3.0之前的版本中使用setAnimation、startAnimation。 4.Security ??
- setFilterTouchesWhenObscured(boolean)
- onFilterTouchEventForSecurity(MotionEvent)
FLAG_WINDOW_IS_OBSCURED
主要方法和属性
XML
| XML属性 | 相关方法 | 介绍 |
|---|---|---|
| id | setId(int) | |
| tag | ||
| background | setBackgroundResource(int) | 背景drawable |
| backgroundTint | setBackgroundTintList(ColorStateList) | Tint to apply to the background |
| backgroundTintMode | setBackgroundTintMode(PorterDuff.Mode) | Blending mode used to apply the background tint. |
| foreground | setForeground(Drawable) | 绘制内容时使用的drawable |
| foregroundGravity | setForegroundGravity(int) | |
| foregroundTint | setForegroundTintList(ColorStateList) | |
| foregroundTintMode | setForegroundTintMode(PorterDuff.Mode) | |
| clickable | setClickable(boolean) | 是否响应点击事件 |
| contextClickable | setContextClickable(boolean) | 是否响应context click events |
| longClickable | setLongClickable(boolean) | |
| duplicateParentState | 如果该值设置为true,该view从直接父节点获取绘制状态(focused,pressed等等) | |
| elevation | setElevation(float) | z 深度,如:14.5sp |
| fadeScrollbars | setScrollbarFadingEnabled(boolean) | 当滚动条不使用时是否隐藏滚动条 |
| requiresFadingEdge | ||
| scrollIndicators | ||
| scrollX | ||
| scrollY | ||
| scrollbarAlwaysDrawHorizontalTrack | ||
| scrollbarAlwaysDrawVerticalTrack | ||
| scrollbarDefaultDelayBeforeFade | ||
| scrollbarFadeDuration | ||
| scrollbarSize | ||
| scrollbarStyle | ||
| scrollbarThumbHorizontal | ||
| scrollbarThumbVertical | ||
| scrollbarTrackHorizontal | ||
| scrollbarTrackVertical | ||
| scrollbars | ||
| fadingEdgeLength | getVerticalFadingEdgeLength() | Defines the length of the fading edges. |
| filterTouchesWhenObscured | setFilterTouchesWhenObscured(boolean) | 当前view所在窗口被另一个窗口遮挡时,是否过滤touch |
| fitsSystemWindows | setFitsSystemWindows(boolean) | contentView使用整个窗口,包括ActionBar区域和虚拟按键区域 |
| focusable | setFocusable(boolean) | |
| focusableInTouchMode | setFocusableInTouchMode(boolean) | |
| nextFocusDown | setNextFocusDownId(int) | |
| nextFocusForward | setNextFocusForwardId(int) | |
| nextFocusLeft | setNextFocusLeftId(int) | |
| nextFocusRight | setNextFocusRightId(int) | |
| nextFocusUp | setNextFocusUpId(int) | |
| hapticFeedbackEnabled | setHapticFeedbackEnabled(boolean) | 触觉反馈 |
| soundEffectsEnabled | ||
| isScrollContainer | setScrollContainer(boolean) | 2:15 |
| keepScreenOn | setKeepScreenOn(boolean) | 2:16 |
| layerType | setLayerType(int,Paint) | 2:17 |
| layoutDirection | setLayoutDirection(int) | |
| minHeight | setMinimumHeight(int) | |
| minWidth | setMinimumWidth(int) | |
| padding | setPaddingRelative(int,int,int,int) | |
| paddingBottom | ||
| paddingEnd | ||
| paddingLeft | ||
| paddingRight | ||
| paddingStart | ||
| paddingTop | ||
| onClick | ||
| rotation | ||
| rotationX | ||
| rotationY | ||
| scaleX | ||
| scaleY | ||
| transformPivotX | ||
| transformPivotY | ||
| transitionName | ||
| translationX | ||
| translationY | ||
| translationZ | ||
| visibility | ||
| stateListAnimator | ||
| saveEnabled | ||
| textAlignment | ||
| textDirection |