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

results matching ""

    No results matching ""