AbsListView 川长思鸟来 2022-01-09 04:15 113阅读 0赞 结构 继承关系 public abstract class AbsListView extends AdapterView <T extends Adapter> implements TextWatcher ViewTreeObserver.OnGlobalLayoutListener ViewTreeObserver.OnTouchModeChangeListener Filter.FilterListener java.lang.Object android.view.View android.view.ViewGroup android.widget.AdapterView<T extends android.widget.Adapter> android.widget.AbsListView 类概述 用于实现条目的虚拟列表的基类. 这里的列表没有空间的定义。 例如,该类的子类可以以网格的形式、走马灯的形式显示,或者作为堆栈等等。 嵌套类 class AbsListView.LayoutParams AbsListView 扩展了 LayoutParams 以提供空间来保存试图类型。 interface AbsListView.OnScrollListener 为了在列表或网格滚动时执行回调函数而定义的接口。 interface AbsListView.RecyclerListener RecyclerListener 是用于接收视图被移动到待回收堆中时的消息的监听器. XML属性 属性名称 描述 android:cacheColorHint 指示该列表总是在固定的单色、不透明的背景下绘制。这允许列表优化其绘制过程 android:drawSelectorOnTop 如果设为真,选择器将绘制在选中条目的上层。否则绘制在下层。默认为假 android:fastScrollEnabled 允许使用快速滚动滑块,可以通过拖动该滑块在列表中快速滚动 android:listSelector 用于在列表中指示当前选中条目的可绘制对象 android:scrollingCache 当为真时,列表滚动使用绘图缓存。该选项使渲染更快,但占用更多的内存。 默认值为真 android:smoothScrollbar 为真时,列表会使用更精确的基于条目在屏幕上的可见像素高度的计算方法。 默认该属性为真,如果你的适配器需要绘制可变高的条目,他应该设为假。 当该属性为真时,你在适配器在显示变高条目时,滚动条的把手会在滚动的 过程中改变大小。当设为假时,列表只使用适配器中的条目数和屏幕上的 可见条目来决定滚动条的属性 android:stackFromBottom 用于 ListView 和 GridView,指示他们的内容栈从底部开始 android:textFilterEnabled 设为真时,列表会过滤根据用户的要求,过滤结果集。列表的适配器必须实现了 Filterable 接口,才能使其可用 android:transcriptMode 设置列表的跳转模式。在跳转模式下,当加入新条目时,列表会滚动到底部, 使新条目可见 常量 int TRANSCRIPT\_MODE\_ALWAYS\_SCROLL 无视当前可见条目,总是自动滚动到列表的底部。 int TRANSCRIPT\_MODE\_DISABLED 禁用跳转模式。 int TRANSCRIPT\_MODE\_NORMAL 仅当最后的条目在屏幕上可见,并且收到数据集变更消息时列表将自动滚动到底部。 公共方法 public void addTouchables (ArrayList<View> views) 想views添加可触控视图,该可触控视图是该视图的后代(如果该视图可触控, 也可以添加该视图)。 参数 views 现在为止的可触控视图。 public void afterTextChanged (Editable s) 为关联到文本过滤器的文本监视器准备的。什么也不做。 public void beforeTextChanged (CharSequence s, int start, int count, int after) 为关联到文本过滤器的文本监视器准备的。什么也不做。 public boolean checkInputConnectionProxy (View view) 测试是否为了过滤信息,为文本编辑器使用了输入连接代理,该操作允许使用代理。 参数 view 生成InputMethodManager调用的视图。 返回值 允许调用返回true,拒绝返回false。 public void clearTextFilter () 清楚文本过滤器。 public void draw (Canvas canvas) 在指定的画布上手动绘制视图(及其子视图). 调用该函数之前,视图必须已经完成整个布局过程。 当实现一个视图时,不需要继承这个方法;而是实现onDraw(Canvas)方法。 参数 canvas 要绘制视图的画布 public AbsListView.LayoutParams generateLayoutParams (AttributeSet attrs) 返回一组基于提供的属性集合的布局参数集合. 参数 attrs 用于生成布局参数的属性集. 返回值 ViewGroup.LayoutParams 或其子类的实例. public int getCacheColorHint () 如果该值为非零,表示该视图总是在固定的、单色、不透明的背景上绘制。 返回值 缓存颜色。 public void getFocusedRect (Rect r) 在视图拥有焦点时,用户将焦点移向其他视图,可以使用该方法取得下一个视图的 矩形填充区域。 默认情况,该矩形为视图的 getDrawingRect(Rect)。当然,如果你的视图维护着 内部选中状态,比如游标、选中的行或列,你应该重写该方法,并返回特定的矩形。 参数 r 要填充的矩形,使用视图的坐标系。 public int getListPaddingBottom () 列表内边距是普通视图内边距和选择器内边距的最大值。 返回值 列表底部的内边距。 参见 getPaddingBottom() getSelector() public int getListPaddingLeft () 列表内边距是普通视图内边距和选择器内边距的最大值。 返回值 列表左侧的内边距。 参见 getPaddingLeft() getSelector() public int getListPaddingRight () 列表内边距是普通视图内边距和选择器内边距的最大值。 返回值 列表右侧的内边距。 参见 getPaddingRight() getSelector() public int getListPaddingTop () 列表内边距是普通视图内边距和选择器内边距的最大值。 返回值 列表顶部的内边距。 参见 getPaddingTop() getSelector() public View getSelectedView () 返回值 当前选中条目对应的视图;无选中条目时返回空。 public Drawable getSelector () 返回用于在列表中绘制选择器的 可绘制对象。 返回值 用于显示选择器的可绘制对象。 public int getSolidColor () 如果你的视图总是在单色背景上绘制,并且需要渐变的边时,重载该函数。 返回非零的颜色值,使视图系统可以优化渐进边的绘制。返回非零颜色值时, 阿尔法通道应设为 0xFF。 返回值 该视图的单色背景色;为零表示不是单色。 public CharSequence getTextFilter () 如果存在,则返回列表的文本过滤器。 返回值 文本的列表过滤器;如果过滤器未启用返回空。 public int getTranscriptMode () 返回当前跳转模式。 返回值 TRANSCRIPT\_MODE\_DISABLED、TRANSCRIPT\_MODE\_NORMAL或者TRANSCRIPT\_MODE\_ALWAYS\_SCROLL public boolean hasTextFilter () 返回列表视图是否具有文本过滤器。 public void invalidateViews () 使所有的视图重新构建并重绘。 public boolean isFastScrollEnabled () 返回当前快速滚动特性的状态。 返回值 如果快速滚动已启用返回真,否则返回假。 参见 setFastScrollEnabled(boolean) public boolean isScrollingCacheEnabled () 指示滚动时是否使用子视图的绘图缓存。默认为使用绘图缓存,这会占用更多的内存。 返回值 如果启用了滚动缓存返回真,否则返回假。 参见 setScrollingCacheEnabled(boolean) setDrawingCacheEnabled(boolean) public boolean isSmoothScrollbarEnabled () 返回平滑滚动特性的当前状态。 返回值 如果平滑滚动启用返回真,否则返回假。 参见 setSmoothScrollbarEnabled(boolean) public boolean isStackFromBottom () 指示该视图的内容是否为向上插入,或者说栈底在底边。 返回值 如果该视图内容以底边为栈底返回真,否则返回假。 public boolean isTextFilterEnabled () 指示该视图是否启用了输入过滤。 返回值 如启用了输入过滤则为真,否则为假。 参见 setTextFilterEnabled(boolean) Filterable public InputConnection onCreateInputConnection (EditorInfo outAttrs) 返回用于编辑过滤文本的 InputConnection 对象。 参数 outAttrs 链接使用的属性信息。 public void onFilterComplete (int count) 过滤操作结束的通知。 参数 count 过滤结果的数量 public void onGlobalLayout () 视图树的可视性或全局布局状态发生变化时执行的回调函数。 public boolean onInterceptTouchEvent (MotionEvent ev) 使用此方法可以拦截所有触摸屏动作引发的事件.这意味着你可以监视分派给子项的事件, 并且可以在当前手势的任何一点获得其控制权。 使用此方法需谨慎.因为它与 View.onTouchEvent(MotionEvent) 有相当复杂的交互。使用它需要像该方法实现一样正确的实现该方法。触控事件是按如下顺序接收的: \* 首先该函数收到按下事件 \* 按下事件会在视图组的子视图以及本视图的 onTouchEvent()方法中处理. 这意味着若要处理之后的手势(代替父视图来处理该事件),你应该实现 onTouchEvent() 方法并返回真.另外,如果你的onTouchEvent() 方法返回真, onInterceptTouchEvent() 方法将不会收到接下来发生的事件, 整个触控处理必须在 onTouchEvent() 方法中进行. \* 如果该方法返回假,接下来的每个事件(直到最后的抬起事件) 都会首先由该函数来处理,之后传给目标对象的 onTouchEvent() 方法. \* 如果该函数返回真,你不会收到接下来的任何事件: 目标视图会接收到该事件,但其动作被标记为 ACTION\_CANCEL,之后的事件都会交由你的 onTouchEvent() 方法来处理,不再出现在该方法中。 参数 ev 沿着层次结构向下分派的动作事件。 返回值 若将动作事件从子视图中截获并通过 onTouchEvent() 将他们分派给当前视图组,则返回真。当前目标将收到 ACTION\_CANCEL 事件,并且不再会有其他消息传入该函数。 public boolean onKeyDown (int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple() 的默认实现. 如果视图可用并可按, 当按下 KEYCODE\_DPAD\_CENTER 或 KEYCODE\_ENTER 时执行视图的按下事件。 参数 keyCode 表示按下的键的、在 KEYCODE\_ENTER 中定义的键盘代码。 event KeyEvent 对象,定义了按钮动作。 返回值 如果处理了事件,返回真。如果允许下一个事件接受器处理该事件,可以返回假。 public boolean onKeyUp (int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple() 的默认实现. 当释放 KEYCODE\_DPAD\_CENTER 或 KEYCODE\_ENTER 时执行视图的单击事件。 参数 keyCode 表示按下的键的、在 KEYCODE\_ENTER 中定义的键盘代码。 event KeyEvent 对象,定义了按钮动作。 返回值 如果处理了事件,返回真.如果允许下一个事件接受器处理该事件,可以返回假。 public void onRestoreInstanceState (Parcelable state) 允许视图重新应用之前由 onSaveInstanceState() 保存的内部状态的回调函数。该方法得 state 参数不可能为空。 参数 state 之前由 onSaveInstanceState() 返回的状态信息。 public Parcelable onSaveInstanceState () 允许视图保存其内部状态的回调函数,以便于之后使用相同状态创建新实例. 该状态应该只包含非持久的或者之后不可重现的信息.例如,你不能保存视图在屏幕上的位置, 因为在创建新视图时,会在视图得层次结构中重新计算它的位置。 这里是一些可以保存的信息的例子:文本框中当前光标的位置(通常不是文字内容本身, 因为文字内容一般保存在内容提供者或其他持久的储存器中),列表视图中的当前选中条目等等。 返回值 返回包含视图当前状态的 Parcelable 对象,当不想保存状态时返回空。默认实现返回空。 public void onTextChanged (CharSequence s, int start, int before, int count) 为关联到文本过滤器的文本监视器准备的。当文本变更时,执行实际的过滤操作, 并维护弹出显示中的当前输入的过滤文本隐藏和显示。 public boolean onTouchEvent (MotionEvent ev) 实现该方法来处理触屏事件。 参数 ev 触屏事件. 返回值 如果事件已经处理返回真;否则返回假。 public void onTouchModeChanged (boolean isInTouchMode) 触摸模式发生改变时调用的回调函数。 参数 isInTouchMode 如果视图结构当前处于触摸模式,参数为真;否则为假。 public void onWindowFocusChanged (boolean hasWindowFocus) 包含该视图的窗体获得或失去焦点时调用该函数。注意,该动作是与视图的焦点 分开的:为了受到键盘事件,你的视图及其窗口都必须拥有焦点。如果有窗口 覆盖在你的窗口上方并得到输入焦点,你的窗口会失去焦点,但是视图的焦点 保持不变。 参数 hasWindowFocus 如果包含该视图的窗口拥有焦点,值为真;否则为假。 public int pointToPosition (int x, int y) 将坐标点转换为列表中的位置。 参数 x 本地坐标系的 X。 y 本地坐标系的 Y。 返回值 包含指定点的条目的位置,如果点不再任何条目上返回 INVALID\_POSITION。 public long pointToRowId (int x, int y) 将坐标点转换为列表条目的行ID。 参数 x 本地坐标系的 X。 y 本地坐标系的 Y。 返回值 包含指定点的条目的条目的行ID;如果点不再任何条目上返回 INVALID\_ROW\_ID。 public void reclaimViews (List<View> views) 将该 AbsListView 中的所有视图(不包含头尾视图)移到提供的列表中。 这些视图包括显示在屏幕上的以及放入 AbsListView 内部视图回收器的视图。 参数 views 用于填充视图的列表。 public void requestLayout () 当某些变更导致视图的布局失效时调用该方法.该方法按照视图树的顺序调用。 public void setCacheColorHint (int color) 当color的值不为0时,此值表示的颜色将提示使用者,列表正在一片单色不透明的背景上被画出。 当 color 的值非零时,示意该列表使用实心、单色不透明的背景,可以缓存背景色。 参数 color 背景色。 public void setDrawSelectorOnTop (boolean onTop) 控制选择高亮可绘制对象应该在条目的前面绘制还是在后面绘制。 参数 onTop 如果为真,选择器的高亮在条目上面显示。默认值为假。 相关 XML 属性 android:drawSelectorOnTop public void setFastScrollEnabled (boolean enabled) 允许使用快速滚动手柄,可以通过拖动该手柄在列表中快速滚动。 若要显示字母预览并在其间跳转,与列表关联的适配器应该实现 SectionIndexer 接口。 参数 enabled 是否允许快速滚动。 参见 SectionIndexer isFastScrollEnabled() public void setFilterText (String filterText) 为文本过滤器设置初始值。 参数 filterText 过滤器使用的文本。 参见 setTextFilterEnabled(boolean) public void setOnScrollListener (AbsListView.OnScrollListener l) 设置每次列表滚动时收到消息的监听器。 参数 l 滚动监听器。 public void setOverScrollMode (int mode) 为视图设置过滚动模式。有效的过滚动模式有 OVER\_SCROLL\_ALWAYS(默认值)、 OVER\_SCROLL\_IF\_CONTENT\_SCROLLS(视图内容大于容器时允许过滚动)、 和OVER\_SCROLL\_NEVER. 只有当视图可以滚动时,才可以设置视图的过滚动模式. 参数 mode 视图的新的过滚动模式 public void setRecyclerListener (AbsListView.RecyclerListener listener) 设置当视图被放入回收器等待被重用时得到通知的回收监听器。 该监听器用于释放关联到视图的资源。 参数 listener 视图被放入回收器时收到通知的回收监听器。 参见 AbsListView.RecycleBin AbsListView.RecyclerListener public void setScrollIndicators (View up, View down) (译者注:用途参见这里:how to define scrollbar's thumb Drawables from java code?) public void setScrollingCacheEnabled (boolean enabled) 启用或停止在滚动时使用子视图的绘图缓存。默认为使用绘图缓存,这会占用更多的内存。 当启用滚动缓存时,首次滚动后会保留缓存。你可以通过调用setChildrenDrawingCacheEnabled(boolean) 手动清除缓存。 参数 enabled 启用滚动缓存时为真,否则为假。 参见 isScrollingCacheEnabled() setDrawingCacheEnabled(boolean) public void setSelector (Drawable sel) 设置用于将当前选择条目设置为高亮的可绘制对象。 public void setSelector (int resID) 设置用于将当前选择条目设置为高亮的可绘制对象。 参数 resID 作为选择高亮的可绘制对象资源。 相关 XML 属性 android:listSelector public void setSmoothScrollbarEnabled (boolean enabled) 当平滑滚动启用时,滚动条把手的位置和大小基于可见条目的可见像素数来计算。 该处里假定所有列表条目具有相同的高度。如果你使用条目高度不同的类表, 滚动条会在用户滚动过程中改变大小。为了避免这种情况,应该禁用该特性。 当平滑滚动被禁用后,滚动条把手的大小和位置只是基于适配器中的条目数, 以及适配器中的可见条目来确定。这样可以为使用可变高条目列表的用户, 提供稳定的滚动条。 参数 enabled 是否启用平滑滚动。 相关 XML 属性 android:smoothScrollbar 参见 setSmoothScrollbarEnabled(boolean) public void setStackFromBottom (boolean stackFromBottom) 当栈从底部开始设置为真时,列表从底部开始向上填充视图。 参数 stackFromBottom 为真时,视图内容固定于底部;为假时,固定在顶部。 public void setTextFilterEnabled (boolean textFilterEnabled) 启用或禁用输入过滤窗口。如启用,在视图具有焦点时,将会过滤子对象,以匹配用户输入。 注意,视图使用的适配器必须实现了Filterable接口。 参数 textFilterEnabled 为真表示启用输入过滤,反之则为假。 参见 Filterable public void setTranscriptMode (int mode) 将列表或网格设置为跳转模式。该模式下,列表或网格总是滚动到底部,以显示新条目。 参数 mode 设置的跳转模式。 参见 TRANSCRIPT\_MODE\_DISABLED TRANSCRIPT\_MODE\_NORMAL TRANSCRIPT\_MODE\_ALWAYS\_SCROLL public boolean showContextMenuForChild (View originalView) 为指定的视图或者其父类显示上下文菜单。 大部分情况下,子类不需要重写该方法。但是,如果直接将子类添加到窗口管理器(例如:使用 addView(View, android.view.ViewGroup.LayoutParams) 函数),此时就需要重写来显示上下文菜单。 参数 originalView 首先显示的上下文菜单的原始视图. 返回值 如果显示了上下文菜单返回真。 public void smoothScrollBy (int distance, int duration) 平滑滚动 distance 个像素,持续 duration 毫秒。 参数 distance 滚动的距离,像素数。 duration 滚动动画持续的时间,毫秒。 public void smoothScrollToPosition (int position, int boundPosition) 平滑滚动到指定的适配器位置。视图会滚动到指定位置显示出来,如果滚动会使 boundPosition 滚动到视图外,滚动会先被停止。 参数 position 要滚动到的适配器位置。 boundPosition 如果要将这个适配器位置移出视图,滚动会停止。 public void smoothScrollToPosition (int position) 平滑滚动到指定的适配器位置。视图会滚动到指定位置显示出来。 参数 position 要滚动到的适配器位置。 public boolean verifyDrawable (Drawable dr) 如果你的视图子类显示自己的可绘制对象,他应该重写此方法并为自己的每个可绘制对象返回真。该函数允许为这些可绘制对象准备动画效果。 重写此方法时,要保证调用其父类的该方法。 参数 dr 待校验的可绘制对象。如果是你显示的对象之一,返回真;否则返回调用父类的返回值。 返回值 boolean 如果可绘制对象已经显示在视图上了,返回真;否则返回假,不允许动画效果。 受保护方法 protected boolean checkLayoutParams (ViewGroup.LayoutParams p) (译者注:检测是不是AbsoluteLayout.LayoutParams的实例) protected int computeVerticalScrollExtent () 计算滚动条把手在纵向滚动范围内占用的幅度。该值用于计算滚动条把手在滚动条滑道中的长度。 范围使用与 computeVerticalScrollRange() 和 computeVerticalScrollOffset() 相同的任意单位。 默认的长度是视图的可绘制高度。 返回值 滚动条把手在纵向滚动范围内占用的幅度。 protected int computeVerticalScrollOffset () 计算滚动条把手在纵向滚动范围内的位置。该值用于计算滚动条把手在滚动条滑道中的位置。 范围使用与 computeVerticalScrollRange() 和 computeVerticalScrollExtent() 相同的任意单位。 默认位置是视图的滚动条位置。 返回值 滚动条把手的纵向位置 protected int computeVerticalScrollRange () 计算滚动条代表的纵向范围。 范围使用与 computeVerticalScrollExtent() 和 computeVerticalScrollOffset() 相同的任意单位。 返回值 纵向滚动条代表的整个纵向范围。 默认纵向范围时视图的绘制高度。 protected void dispatchDraw (Canvas canvas) 调用此方法来绘出子视图。可被衍生类重写,以便在其子项被画出之前取得控制权。此方法由 draw 方法在绘制子视图时调用。子类可以重写该方法,在绘制其子视图之前获得控制权。(但是在绘制其自身的视图之后。) 参数 canvas 绘制视图的画布。 protected void dispatchSetPressed (boolean pressed) 为视图的所有子视图调用 setPressed 方法。 参数 pressed 新的按下状态。 protected void drawableStateChanged () 在视图状态的变化影响到所显示可绘制对象的状态时调用该方法。 覆盖该方法时,要确保调用了父类的该方法。 protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p) 基于提供的布局参数返回一组安全的布局参数集合。当传入 ViewGroup 的视图的参数没有通过 checkLayoutParams(android.view.ViewGroup.LayoutParams) 的检测时,调用该方法。该方法会返回适合 ViewGroup 的新的布局参数,可能从指定的布局参数中复制适当的属性。 参数 p 要转换为适合于 ViewGroup 的布局参数的集合. 返回值 ViewGroup.LayoutParams 或其子类的实例。 protected float getBottomFadingEdgeStrength () 返回底部渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间。缺省实现只返回0.0或1.0,而不返回中间值。子类应该重载此方法来给滚动时提供更平滑的渐变过程。 返回值 底部渐变的强度,即介于0.0f和1.0f之间的浮点值。 protected ContextMenu.ContextMenuInfo getContextMenuInfo () 如果视图要向上下文菜单加入额外信息,就应该实现该方法。返回的结果作为 onCreateContextMenu(ContextMenu, View, ContextMenuInfo) 回调函数的参数。 返回值 上下文菜单要显示的条目的额外信息.该信息会根据视图子类的不同而变化。 protected float getTopFadingEdgeStrength () 返回顶部渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间. 缺省实现只返回0.0或1.0,而不返回中间值。子类应该重载此方法来给滚动时提供更平滑的渐变过程。 返回值 顶部渐变的强度,即介于0.0f和1.0f之间的浮点值。 protected void handleDataChanged () protected boolean isInFilterMode () 指示视图是否处于过滤状态。过滤状态在用户在键盘上输入信息时启动。 返回值 如果视图处于过滤状态,返回真;否则返回假。 protected void layoutChildren () 子类必须重写此方法,以为其子视图布局。 protected void onAttachedToWindow () 当视图附加到窗体上时调用该方法。在这个时点,视图拥有了用于显示的表面,将开始绘制。注意,系统保证在调用onDraw(Canvas) 之前调用该方法,但可能在调用 onDraw(Canvas) 之前的任何时刻,包括调用 onMeasure(int, int) 之前或之后。 protected int\[\] onCreateDrawableState (int extraSpace) 为当前视图生成新的 Drawable 状态时发生。当视图系统检测到缓存的可绘制对象失效时,调用该方法。你可以使用 getDrawableState() 方法重新取得当前的状态。 参数 extraSpace 如果为非零,该值为你要在返回值的数组中存放的你自己的状态信息的数量。 返回值 返回保存了视图的当前 Drawable 状态的数组。 protected void onDetachedFromWindow () 将视图从屏幕上销毁的时候调用该方法。这个时点视图已经不具有可绘制部分。 protected void onDisplayHint (int hint) 得到视图是否处于显示状态的提示信息。例如,当视图移出屏幕时,他收到视图没有显示的提示 信息。应用程序不应该依靠该回调函数,不保证一定会收到该提示。 参数 hint 关于视图是否处于显示状态:VISIBLE 或 INVISIBLE。 protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect) 当视图的焦点改变时调用。由定向导航导致的焦点变更时, direction 和 previouslyFocusedRect 提供了焦点是从那里来的进一步信息。 参数 gainFocus 如果视图具有焦点,值为真;否则为假。 direction 当调用 requestFocus() 为该视图设置焦点时,该值为焦点移动的方向。其值为 FOCUS\_UP、FOCUS\_DOWN、 FOCUS\_LEFT 或者 FOCUS\_RIGHT。当使用无参数的requestFocus() 时,可能无值。 previouslyFocusedRect 失去焦点的视图的矩形坐标,使用该视图的坐标系统.如果指定了, 它将传入可以知道焦点来自哪里的详细信息(作为对 direction 的补充)。否则,其值为 null。 protected void onLayout (boolean changed, int l, int t, int r, int b) 子类不要重载此方法,如需要请重载 layoutChildren() 来代替。 参数 changed 是否为视图设置了新的大小和位置。 l 相对于父视图的左侧的位置。 t 相对于父视图的顶部的位置。 r 相对于父视图的右侧的位置。 b 相对于父视图的底部的位置。 protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) 评估视图及其内容,以决定其宽度和高度.此方法由 measure(int, int) 调用,子类可以重载以提供更精确、更有效率的衡量其内容尺寸的方法。 约定: 覆盖该方法时,必须调用 setMeasuredDimension(int, int) 方法来保存评估结果的视图的宽度和高度.如果忘记将导致 measure(int, int) 方法抛出IllegalStateException异常.要有效的利用父类的 onMeasure(int, int)方法。 基类测量的是背景的大小,除非 MeasureSpec 允许超过背景.子类应该重写 onMeasure(int, int) 方法,以为其内容提供更适合的大小。 如果重写了该方法,子类要确保其高度和宽度大于等于视图的最小高度和宽度. (getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()) 参数 widthMeasureSpec 父视图要求的横向空间大小.该要求由 View.MeasureSpec 进行了编码处理。 heightMeasureSpec 父视图要求的纵向空间大小.该要求由 View.MeasureSpec 进行了编码处理。 protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY) 由 overScrollBy(int, int, int, int, int, int, int, int, boolean) 调用,用于响应过滚动操作。 参数 scrollX 新的 X 轴滚动位置,以像素为单位。 scrollY 新的 Y 轴滚动位置,以像素为单位。 clampedX 当 scrollX 被限制在过滚动边界时,为真。 clampedY 当 scrollY 被限制在过滚动边界时,为真。 protected void onSizeChanged (int w, int h, int oldw, int oldh) 布局时该视图的大小发生改变时调用该方法.如果是刚加入的视图,变更前的值为 0。 参数 w 视图的当前宽度。 h 视图的当前高度。 oldw 视图变更前的宽度。 oldh 视图变更前的高度。 补充 文章精选 android UI 优化之 AbsListView之深度优化 AbsListView.LayoutParams 译者署名: cnmahj 译者链接: http://android.toolib.net/blog/ 版本:Android 2.3 r1 结构 继承关系 public static class AbsListView.LayoutParams extends ViewGroup.LayoutParams java.lang.Object android.view.ViewGroup.LayoutParams android.widget.AbsListView.LayoutParams 概述 AbsListView 扩展了 LayoutParams 以提供空间来保存试图类型。 AbsListView.OnScrollListener 译者署名: cnmahj 译者链接: http://android.toolib.net/blog/ 版本:Android 2.3 r1 结构 继承关系 public static class AbsListView.OnScrollListener android.widget.AbsListView.OnScrollListener 概述 为了在列表或网格滚动时执行回调函数而定义的接口。 常量 public static final int SCROLL\_STATE\_FLING 用户之前通过触控滚动并执行了快速滚动。滚动动画正滑向停止点。 常量值: 2 (0x00000002) public static final int SCROLL\_STATE\_IDLE 视图没有滚动。注意,使用轨迹球滚动时,在滚动停止之前,一直处于空闲状态。 常量值: 0 (0x00000000) public static final int SCROLL\_STATE\_TOUCH\_SCROLL 用户通过触控滚动,并且手指没有离开屏幕。 常量值: 1 (0x00000001) 公共方法 public abstract void onScroll (AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 当列表或网格的滚动已经完成时调用的回调函数。会在滚动完成后调用。 参数 view 报告滚动状态的对象视图。 firstVisibleItem 第一个可见单元格的索引(如果 visibleItemCount == 0 则忽略该参数)。 visibleItemCount 可见单元格数。 totalItemCount 列表适配器中的条目数。 public abstract void onScrollStateChanged (AbsListView view, int scrollState) 当列表视图或网格视图正在滚动是执行的回调函数。如果视图正在滚动, 该方法会在渲染下一帧之前调用该方法。就是说,会在调用任何 getView(int, View, ViewGroup)方法之前调用。 参数 view 报告滚动状态的对象视图。结构 继承关系 public abstract class AbsListView extends AdapterView <T extends Adapter> implements TextWatcher ViewTreeObserver.OnGlobalLayoutListener ViewTreeObserver.OnTouchModeChangeListener Filter.FilterListener java.lang.Object android.view.View android.view.ViewGroup android.widget.AdapterView<T extends android.widget.Adapter> android.widget.AbsListView 类概述 用于实现条目的虚拟列表的基类. 这里的列表没有空间的定义。 例如,该类的子类可以以网格的形式、走马灯的形式显示,或者作为堆栈等等。 嵌套类 class AbsListView.LayoutParams AbsListView 扩展了 LayoutParams 以提供空间来保存试图类型。 interface AbsListView.OnScrollListener 为了在列表或网格滚动时执行回调函数而定义的接口。 interface AbsListView.RecyclerListener RecyclerListener 是用于接收视图被移动到待回收堆中时的消息的监听器. XML属性 属性名称 描述 android:cacheColorHint 指示该列表总是在固定的单色、不透明的背景下绘制。这允许列表优化其绘制过程 android:drawSelectorOnTop 如果设为真,选择器将绘制在选中条目的上层。否则绘制在下层。默认为假 android:fastScrollEnabled 允许使用快速滚动滑块,可以通过拖动该滑块在列表中快速滚动 android:listSelector 用于在列表中指示当前选中条目的可绘制对象 android:scrollingCache 当为真时,列表滚动使用绘图缓存。该选项使渲染更快,但占用更多的内存。 默认值为真 android:smoothScrollbar 为真时,列表会使用更精确的基于条目在屏幕上的可见像素高度的计算方法。 默认该属性为真,如果你的适配器需要绘制可变高的条目,他应该设为假。 当该属性为真时,你在适配器在显示变高条目时,滚动条的把手会在滚动的 过程中改变大小。当设为假时,列表只使用适配器中的条目数和屏幕上的 可见条目来决定滚动条的属性 android:stackFromBottom 用于 ListView 和 GridView,指示他们的内容栈从底部开始 android:textFilterEnabled 设为真时,列表会过滤根据用户的要求,过滤结果集。列表的适配器必须实现了 Filterable 接口,才能使其可用 android:transcriptMode 设置列表的跳转模式。在跳转模式下,当加入新条目时,列表会滚动到底部, 使新条目可见 常量 int TRANSCRIPT\_MODE\_ALWAYS\_SCROLL 无视当前可见条目,总是自动滚动到列表的底部。 int TRANSCRIPT\_MODE\_DISABLED 禁用跳转模式。 int TRANSCRIPT\_MODE\_NORMAL 仅当最后的条目在屏幕上可见,并且收到数据集变更消息时列表将自动滚动到底部。 公共方法 public void addTouchables (ArrayList<View> views) 想views添加可触控视图,该可触控视图是该视图的后代(如果该视图可触控, 也可以添加该视图)。 参数 views 现在为止的可触控视图。 public void afterTextChanged (Editable s) 为关联到文本过滤器的文本监视器准备的。什么也不做。 public void beforeTextChanged (CharSequence s, int start, int count, int after) 为关联到文本过滤器的文本监视器准备的。什么也不做。 public boolean checkInputConnectionProxy (View view) 测试是否为了过滤信息,为文本编辑器使用了输入连接代理,该操作允许使用代理。 参数 view 生成InputMethodManager调用的视图。 返回值 允许调用返回true,拒绝返回false。 public void clearTextFilter () 清楚文本过滤器。 public void draw (Canvas canvas) 在指定的画布上手动绘制视图(及其子视图). 调用该函数之前,视图必须已经完成整个布局过程。 当实现一个视图时,不需要继承这个方法;而是实现onDraw(Canvas)方法。 参数 canvas 要绘制视图的画布 public AbsListView.LayoutParams generateLayoutParams (AttributeSet attrs) 返回一组基于提供的属性集合的布局参数集合. 参数 attrs 用于生成布局参数的属性集. 返回值 ViewGroup.LayoutParams 或其子类的实例. public int getCacheColorHint () 如果该值为非零,表示该视图总是在固定的、单色、不透明的背景上绘制。 返回值 缓存颜色。 public void getFocusedRect (Rect r) 在视图拥有焦点时,用户将焦点移向其他视图,可以使用该方法取得下一个视图的 矩形填充区域。 默认情况,该矩形为视图的 getDrawingRect(Rect)。当然,如果你的视图维护着 内部选中状态,比如游标、选中的行或列,你应该重写该方法,并返回特定的矩形。 参数 r 要填充的矩形,使用视图的坐标系。 public int getListPaddingBottom () 列表内边距是普通视图内边距和选择器内边距的最大值。 返回值 列表底部的内边距。 参见 getPaddingBottom() getSelector() public int getListPaddingLeft () 列表内边距是普通视图内边距和选择器内边距的最大值。 返回值 列表左侧的内边距。 参见 getPaddingLeft() getSelector() public int getListPaddingRight () 列表内边距是普通视图内边距和选择器内边距的最大值。 返回值 列表右侧的内边距。 参见 getPaddingRight() getSelector() public int getListPaddingTop () 列表内边距是普通视图内边距和选择器内边距的最大值。 返回值 列表顶部的内边距。 参见 getPaddingTop() getSelector() public View getSelectedView () 返回值 当前选中条目对应的视图;无选中条目时返回空。 public Drawable getSelector () 返回用于在列表中绘制选择器的 可绘制对象。 返回值 用于显示选择器的可绘制对象。 public int getSolidColor () 如果你的视图总是在单色背景上绘制,并且需要渐变的边时,重载该函数。 返回非零的颜色值,使视图系统可以优化渐进边的绘制。返回非零颜色值时, 阿尔法通道应设为 0xFF。 返回值 该视图的单色背景色;为零表示不是单色。 public CharSequence getTextFilter () 如果存在,则返回列表的文本过滤器。 返回值 文本的列表过滤器;如果过滤器未启用返回空。 public int getTranscriptMode () 返回当前跳转模式。 返回值 TRANSCRIPT\_MODE\_DISABLED、TRANSCRIPT\_MODE\_NORMAL或者TRANSCRIPT\_MODE\_ALWAYS\_SCROLL public boolean hasTextFilter () 返回列表视图是否具有文本过滤器。 public void invalidateViews () 使所有的视图重新构建并重绘。 public boolean isFastScrollEnabled () 返回当前快速滚动特性的状态。 返回值 如果快速滚动已启用返回真,否则返回假。 参见 setFastScrollEnabled(boolean) public boolean isScrollingCacheEnabled () 指示滚动时是否使用子视图的绘图缓存。默认为使用绘图缓存,这会占用更多的内存。 返回值 如果启用了滚动缓存返回真,否则返回假。 参见 setScrollingCacheEnabled(boolean) setDrawingCacheEnabled(boolean) public boolean isSmoothScrollbarEnabled () 返回平滑滚动特性的当前状态。 返回值 如果平滑滚动启用返回真,否则返回假。 参见 setSmoothScrollbarEnabled(boolean) public boolean isStackFromBottom () 指示该视图的内容是否为向上插入,或者说栈底在底边。 返回值 如果该视图内容以底边为栈底返回真,否则返回假。 public boolean isTextFilterEnabled () 指示该视图是否启用了输入过滤。 返回值 如启用了输入过滤则为真,否则为假。 参见 setTextFilterEnabled(boolean) Filterable public InputConnection onCreateInputConnection (EditorInfo outAttrs) 返回用于编辑过滤文本的 InputConnection 对象。 参数 outAttrs 链接使用的属性信息。 public void onFilterComplete (int count) 过滤操作结束的通知。 参数 count 过滤结果的数量 public void onGlobalLayout () 视图树的可视性或全局布局状态发生变化时执行的回调函数。 public boolean onInterceptTouchEvent (MotionEvent ev) 使用此方法可以拦截所有触摸屏动作引发的事件.这意味着你可以监视分派给子项的事件, 并且可以在当前手势的任何一点获得其控制权。 使用此方法需谨慎.因为它与 View.onTouchEvent(MotionEvent) 有相当复杂的交互。使用它需要像该方法实现一样正确的实现该方法。触控事件是按如下顺序接收的: \* 首先该函数收到按下事件 \* 按下事件会在视图组的子视图以及本视图的 onTouchEvent()方法中处理. 这意味着若要处理之后的手势(代替父视图来处理该事件),你应该实现 onTouchEvent() 方法并返回真.另外,如果你的onTouchEvent() 方法返回真, onInterceptTouchEvent() 方法将不会收到接下来发生的事件, 整个触控处理必须在 onTouchEvent() 方法中进行. \* 如果该方法返回假,接下来的每个事件(直到最后的抬起事件) 都会首先由该函数来处理,之后传给目标对象的 onTouchEvent() 方法. \* 如果该函数返回真,你不会收到接下来的任何事件: 目标视图会接收到该事件,但其动作被标记为 ACTION\_CANCEL,之后的事件都会交由你的 onTouchEvent() 方法来处理,不再出现在该方法中。 参数 ev 沿着层次结构向下分派的动作事件。 返回值 若将动作事件从子视图中截获并通过 onTouchEvent() 将他们分派给当前视图组,则返回真。当前目标将收到 ACTION\_CANCEL 事件,并且不再会有其他消息传入该函数。 public boolean onKeyDown (int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple() 的默认实现. 如果视图可用并可按, 当按下 KEYCODE\_DPAD\_CENTER 或 KEYCODE\_ENTER 时执行视图的按下事件。 参数 keyCode 表示按下的键的、在 KEYCODE\_ENTER 中定义的键盘代码。 event KeyEvent 对象,定义了按钮动作。 返回值 如果处理了事件,返回真。如果允许下一个事件接受器处理该事件,可以返回假。 public boolean onKeyUp (int keyCode, KeyEvent event) KeyEvent.Callback.onKeyMultiple() 的默认实现. 当释放 KEYCODE\_DPAD\_CENTER 或 KEYCODE\_ENTER 时执行视图的单击事件。 参数 keyCode 表示按下的键的、在 KEYCODE\_ENTER 中定义的键盘代码。 event KeyEvent 对象,定义了按钮动作。 返回值 如果处理了事件,返回真.如果允许下一个事件接受器处理该事件,可以返回假。 public void onRestoreInstanceState (Parcelable state) 允许视图重新应用之前由 onSaveInstanceState() 保存的内部状态的回调函数。该方法得 state 参数不可能为空。 参数 state 之前由 onSaveInstanceState() 返回的状态信息。 public Parcelable onSaveInstanceState () 允许视图保存其内部状态的回调函数,以便于之后使用相同状态创建新实例. 该状态应该只包含非持久的或者之后不可重现的信息.例如,你不能保存视图在屏幕上的位置, 因为在创建新视图时,会在视图得层次结构中重新计算它的位置。 这里是一些可以保存的信息的例子:文本框中当前光标的位置(通常不是文字内容本身, 因为文字内容一般保存在内容提供者或其他持久的储存器中),列表视图中的当前选中条目等等。 返回值 返回包含视图当前状态的 Parcelable 对象,当不想保存状态时返回空。默认实现返回空。 public void onTextChanged (CharSequence s, int start, int before, int count) 为关联到文本过滤器的文本监视器准备的。当文本变更时,执行实际的过滤操作, 并维护弹出显示中的当前输入的过滤文本隐藏和显示。 public boolean onTouchEvent (MotionEvent ev) 实现该方法来处理触屏事件。 参数 ev 触屏事件. 返回值 如果事件已经处理返回真;否则返回假。 public void onTouchModeChanged (boolean isInTouchMode) 触摸模式发生改变时调用的回调函数。 参数 isInTouchMode 如果视图结构当前处于触摸模式,参数为真;否则为假。 public void onWindowFocusChanged (boolean hasWindowFocus) 包含该视图的窗体获得或失去焦点时调用该函数。注意,该动作是与视图的焦点 分开的:为了受到键盘事件,你的视图及其窗口都必须拥有焦点。如果有窗口 覆盖在你的窗口上方并得到输入焦点,你的窗口会失去焦点,但是视图的焦点 保持不变。 参数 hasWindowFocus 如果包含该视图的窗口拥有焦点,值为真;否则为假。 public int pointToPosition (int x, int y) 将坐标点转换为列表中的位置。 参数 x 本地坐标系的 X。 y 本地坐标系的 Y。 返回值 包含指定点的条目的位置,如果点不再任何条目上返回 INVALID\_POSITION。 public long pointToRowId (int x, int y) 将坐标点转换为列表条目的行ID。 参数 x 本地坐标系的 X。 y 本地坐标系的 Y。 返回值 包含指定点的条目的条目的行ID;如果点不再任何条目上返回 INVALID\_ROW\_ID。 public void reclaimViews (List<View> views) 将该 AbsListView 中的所有视图(不包含头尾视图)移到提供的列表中。 这些视图包括显示在屏幕上的以及放入 AbsListView 内部视图回收器的视图。 参数 views 用于填充视图的列表。 public void requestLayout () 当某些变更导致视图的布局失效时调用该方法.该方法按照视图树的顺序调用。 public void setCacheColorHint (int color) 当color的值不为0时,此值表示的颜色将提示使用者,列表正在一片单色不透明的背景上被画出。 当 color 的值非零时,示意该列表使用实心、单色不透明的背景,可以缓存背景色。 参数 color 背景色。 public void setDrawSelectorOnTop (boolean onTop) 控制选择高亮可绘制对象应该在条目的前面绘制还是在后面绘制。 参数 onTop 如果为真,选择器的高亮在条目上面显示。默认值为假。 相关 XML 属性 android:drawSelectorOnTop public void setFastScrollEnabled (boolean enabled) 允许使用快速滚动手柄,可以通过拖动该手柄在列表中快速滚动。 若要显示字母预览并在其间跳转,与列表关联的适配器应该实现 SectionIndexer 接口。 参数 enabled 是否允许快速滚动。 参见 SectionIndexer isFastScrollEnabled() public void setFilterText (String filterText) 为文本过滤器设置初始值。 参数 filterText 过滤器使用的文本。 参见 setTextFilterEnabled(boolean) public void setOnScrollListener (AbsListView.OnScrollListener l) 设置每次列表滚动时收到消息的监听器。 参数 l 滚动监听器。 public void setOverScrollMode (int mode) 为视图设置过滚动模式。有效的过滚动模式有 OVER\_SCROLL\_ALWAYS(默认值)、 OVER\_SCROLL\_IF\_CONTENT\_SCROLLS(视图内容大于容器时允许过滚动)、 和OVER\_SCROLL\_NEVER. 只有当视图可以滚动时,才可以设置视图的过滚动模式. 参数 mode 视图的新的过滚动模式 public void setRecyclerListener (AbsListView.RecyclerListener listener) 设置当视图被放入回收器等待被重用时得到通知的回收监听器。 该监听器用于释放关联到视图的资源。 参数 listener 视图被放入回收器时收到通知的回收监听器。 参见 AbsListView.RecycleBin AbsListView.RecyclerListener public void setScrollIndicators (View up, View down) (译者注:用途参见这里:how to define scrollbar's thumb Drawables from java code?) public void setScrollingCacheEnabled (boolean enabled) 启用或停止在滚动时使用子视图的绘图缓存。默认为使用绘图缓存,这会占用更多的内存。 当启用滚动缓存时,首次滚动后会保留缓存。你可以通过调用setChildrenDrawingCacheEnabled(boolean) 手动清除缓存。 参数 enabled 启用滚动缓存时为真,否则为假。 参见 isScrollingCacheEnabled() setDrawingCacheEnabled(boolean) public void setSelector (Drawable sel) 设置用于将当前选择条目设置为高亮的可绘制对象。 public void setSelector (int resID) 设置用于将当前选择条目设置为高亮的可绘制对象。 参数 resID 作为选择高亮的可绘制对象资源。 相关 XML 属性 android:listSelector public void setSmoothScrollbarEnabled (boolean enabled) 当平滑滚动启用时,滚动条把手的位置和大小基于可见条目的可见像素数来计算。 该处里假定所有列表条目具有相同的高度。如果你使用条目高度不同的类表, 滚动条会在用户滚动过程中改变大小。为了避免这种情况,应该禁用该特性。 当平滑滚动被禁用后,滚动条把手的大小和位置只是基于适配器中的条目数, 以及适配器中的可见条目来确定。这样可以为使用可变高条目列表的用户, 提供稳定的滚动条。 参数 enabled 是否启用平滑滚动。 相关 XML 属性 android:smoothScrollbar 参见 setSmoothScrollbarEnabled(boolean) public void setStackFromBottom (boolean stackFromBottom) 当栈从底部开始设置为真时,列表从底部开始向上填充视图。 参数 stackFromBottom 为真时,视图内容固定于底部;为假时,固定在顶部。 public void setTextFilterEnabled (boolean textFilterEnabled) 启用或禁用输入过滤窗口。如启用,在视图具有焦点时,将会过滤子对象,以匹配用户输入。 注意,视图使用的适配器必须实现了Filterable接口。 参数 textFilterEnabled 为真表示启用输入过滤,反之则为假。 参见 Filterable public void setTranscriptMode (int mode) 将列表或网格设置为跳转模式。该模式下,列表或网格总是滚动到底部,以显示新条目。 参数 mode 设置的跳转模式。 参见 TRANSCRIPT\_MODE\_DISABLED TRANSCRIPT\_MODE\_NORMAL TRANSCRIPT\_MODE\_ALWAYS\_SCROLL public boolean showContextMenuForChild (View originalView) 为指定的视图或者其父类显示上下文菜单。 大部分情况下,子类不需要重写该方法。但是,如果直接将子类添加到窗口管理器(例如:使用 addView(View, android.view.ViewGroup.LayoutParams) 函数),此时就需要重写来显示上下文菜单。 参数 originalView 首先显示的上下文菜单的原始视图. 返回值 如果显示了上下文菜单返回真。 public void smoothScrollBy (int distance, int duration) 平滑滚动 distance 个像素,持续 duration 毫秒。 参数 distance 滚动的距离,像素数。 duration 滚动动画持续的时间,毫秒。 public void smoothScrollToPosition (int position, int boundPosition) 平滑滚动到指定的适配器位置。视图会滚动到指定位置显示出来,如果滚动会使 boundPosition 滚动到视图外,滚动会先被停止。 参数 position 要滚动到的适配器位置。 boundPosition 如果要将这个适配器位置移出视图,滚动会停止。 public void smoothScrollToPosition (int position) 平滑滚动到指定的适配器位置。视图会滚动到指定位置显示出来。 参数 position 要滚动到的适配器位置。 public boolean verifyDrawable (Drawable dr) 如果你的视图子类显示自己的可绘制对象,他应该重写此方法并为自己的每个可绘制对象返回真。该函数允许为这些可绘制对象准备动画效果。 重写此方法时,要保证调用其父类的该方法。 参数 dr 待校验的可绘制对象。如果是你显示的对象之一,返回真;否则返回调用父类的返回值。 返回值 boolean 如果可绘制对象已经显示在视图上了,返回真;否则返回假,不允许动画效果。 受保护方法 protected boolean checkLayoutParams (ViewGroup.LayoutParams p) (译者注:检测是不是AbsoluteLayout.LayoutParams的实例) protected int computeVerticalScrollExtent () 计算滚动条把手在纵向滚动范围内占用的幅度。该值用于计算滚动条把手在滚动条滑道中的长度。 范围使用与 computeVerticalScrollRange() 和 computeVerticalScrollOffset() 相同的任意单位。 默认的长度是视图的可绘制高度。 返回值 滚动条把手在纵向滚动范围内占用的幅度。 protected int computeVerticalScrollOffset () 计算滚动条把手在纵向滚动范围内的位置。该值用于计算滚动条把手在滚动条滑道中的位置。 范围使用与 computeVerticalScrollRange() 和 computeVerticalScrollExtent() 相同的任意单位。 默认位置是视图的滚动条位置。 返回值 滚动条把手的纵向位置 protected int computeVerticalScrollRange () 计算滚动条代表的纵向范围。 范围使用与 computeVerticalScrollExtent() 和 computeVerticalScrollOffset() 相同的任意单位。 返回值 纵向滚动条代表的整个纵向范围。 默认纵向范围时视图的绘制高度。 protected void dispatchDraw (Canvas canvas) 调用此方法来绘出子视图。可被衍生类重写,以便在其子项被画出之前取得控制权。此方法由 draw 方法在绘制子视图时调用。子类可以重写该方法,在绘制其子视图之前获得控制权。(但是在绘制其自身的视图之后。) 参数 canvas 绘制视图的画布。 protected void dispatchSetPressed (boolean pressed) 为视图的所有子视图调用 setPressed 方法。 参数 pressed 新的按下状态。 protected void drawableStateChanged () 在视图状态的变化影响到所显示可绘制对象的状态时调用该方法。 覆盖该方法时,要确保调用了父类的该方法。 protected ViewGroup.LayoutParams generateLayoutParams (ViewGroup.LayoutParams p) 基于提供的布局参数返回一组安全的布局参数集合。当传入 ViewGroup 的视图的参数没有通过 checkLayoutParams(android.view.ViewGroup.LayoutParams) 的检测时,调用该方法。该方法会返回适合 ViewGroup 的新的布局参数,可能从指定的布局参数中复制适当的属性。 参数 p 要转换为适合于 ViewGroup 的布局参数的集合. 返回值 ViewGroup.LayoutParams 或其子类的实例。 protected float getBottomFadingEdgeStrength () 返回底部渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间。缺省实现只返回0.0或1.0,而不返回中间值。子类应该重载此方法来给滚动时提供更平滑的渐变过程。 返回值 底部渐变的强度,即介于0.0f和1.0f之间的浮点值。 protected ContextMenu.ContextMenuInfo getContextMenuInfo () 如果视图要向上下文菜单加入额外信息,就应该实现该方法。返回的结果作为 onCreateContextMenu(ContextMenu, View, ContextMenuInfo) 回调函数的参数。 返回值 上下文菜单要显示的条目的额外信息.该信息会根据视图子类的不同而变化。 protected float getTopFadingEdgeStrength () 返回顶部渐变边缘的强度或密集度。强度的值介于0.0(无渐变)到1.0(全渐变)之间. 缺省实现只返回0.0或1.0,而不返回中间值。子类应该重载此方法来给滚动时提供更平滑的渐变过程。 返回值 顶部渐变的强度,即介于0.0f和1.0f之间的浮点值。 protected void handleDataChanged () protected boolean isInFilterMode () 指示视图是否处于过滤状态。过滤状态在用户在键盘上输入信息时启动。 返回值 如果视图处于过滤状态,返回真;否则返回假。 protected void layoutChildren () 子类必须重写此方法,以为其子视图布局。 protected void onAttachedToWindow () 当视图附加到窗体上时调用该方法。在这个时点,视图拥有了用于显示的表面,将开始绘制。注意,系统保证在调用onDraw(Canvas) 之前调用该方法,但可能在调用 onDraw(Canvas) 之前的任何时刻,包括调用 onMeasure(int, int) 之前或之后。 protected int\[\] onCreateDrawableState (int extraSpace) 为当前视图生成新的 Drawable 状态时发生。当视图系统检测到缓存的可绘制对象失效时,调用该方法。你可以使用 getDrawableState() 方法重新取得当前的状态。 参数 extraSpace 如果为非零,该值为你要在返回值的数组中存放的你自己的状态信息的数量。 返回值 返回保存了视图的当前 Drawable 状态的数组。 protected void onDetachedFromWindow () 将视图从屏幕上销毁的时候调用该方法。这个时点视图已经不具有可绘制部分。 protected void onDisplayHint (int hint) 得到视图是否处于显示状态的提示信息。例如,当视图移出屏幕时,他收到视图没有显示的提示 信息。应用程序不应该依靠该回调函数,不保证一定会收到该提示。 参数 hint 关于视图是否处于显示状态:VISIBLE 或 INVISIBLE。 protected void onFocusChanged (boolean gainFocus, int direction, Rect previouslyFocusedRect) 当视图的焦点改变时调用。由定向导航导致的焦点变更时, direction 和 previouslyFocusedRect 提供了焦点是从那里来的进一步信息。 参数 gainFocus 如果视图具有焦点,值为真;否则为假。 direction 当调用 requestFocus() 为该视图设置焦点时,该值为焦点移动的方向。其值为 FOCUS\_UP、FOCUS\_DOWN、 FOCUS\_LEFT 或者 FOCUS\_RIGHT。当使用无参数的requestFocus() 时,可能无值。 previouslyFocusedRect 失去焦点的视图的矩形坐标,使用该视图的坐标系统.如果指定了, 它将传入可以知道焦点来自哪里的详细信息(作为对 direction 的补充)。否则,其值为 null。 protected void onLayout (boolean changed, int l, int t, int r, int b) 子类不要重载此方法,如需要请重载 layoutChildren() 来代替。 参数 changed 是否为视图设置了新的大小和位置。 l 相对于父视图的左侧的位置。 t 相对于父视图的顶部的位置。 r 相对于父视图的右侧的位置。 b 相对于父视图的底部的位置。 protected void onMeasure (int widthMeasureSpec, int heightMeasureSpec) 评估视图及其内容,以决定其宽度和高度.此方法由 measure(int, int) 调用,子类可以重载以提供更精确、更有效率的衡量其内容尺寸的方法。 约定: 覆盖该方法时,必须调用 setMeasuredDimension(int, int) 方法来保存评估结果的视图的宽度和高度.如果忘记将导致 measure(int, int) 方法抛出IllegalStateException异常.要有效的利用父类的 onMeasure(int, int)方法。 基类测量的是背景的大小,除非 MeasureSpec 允许超过背景.子类应该重写 onMeasure(int, int) 方法,以为其内容提供更适合的大小。 如果重写了该方法,子类要确保其高度和宽度大于等于视图的最小高度和宽度. (getSuggestedMinimumHeight() 和 getSuggestedMinimumWidth()) 参数 widthMeasureSpec 父视图要求的横向空间大小.该要求由 View.MeasureSpec 进行了编码处理。 heightMeasureSpec 父视图要求的纵向空间大小.该要求由 View.MeasureSpec 进行了编码处理。 protected void onOverScrolled (int scrollX, int scrollY, boolean clampedX, boolean clampedY) 由 overScrollBy(int, int, int, int, int, int, int, int, boolean) 调用,用于响应过滚动操作。 参数 scrollX 新的 X 轴滚动位置,以像素为单位。 scrollY 新的 Y 轴滚动位置,以像素为单位。 clampedX 当 scrollX 被限制在过滚动边界时,为真。 clampedY 当 scrollY 被限制在过滚动边界时,为真。 protected void onSizeChanged (int w, int h, int oldw, int oldh) 布局时该视图的大小发生改变时调用该方法.如果是刚加入的视图,变更前的值为 0。 参数 w 视图的当前宽度。 h 视图的当前高度。 oldw 视图变更前的宽度。 oldh 视图变更前的高度。 补充 文章精选 android UI 优化之 AbsListView之深度优化 AbsListView.LayoutParams 译者署名: cnmahj 译者链接: [http://android.toolib.net/blog/][http_android.toolib.net_blog] 版本:Android 2.3 r1 结构 继承关系 public static class AbsListView.LayoutParams extends ViewGroup.LayoutParams java.lang.Object android.view.ViewGroup.LayoutParams android.widget.AbsListView.LayoutParams 概述 AbsListView 扩展了 LayoutParams 以提供空间来保存试图类型。 AbsListView.OnScrollListener 译者署名: cnmahj 译者链接: [http://android.toolib.net/blog/][http_android.toolib.net_blog] 版本:Android 2.3 r1 结构 继承关系 public static class AbsListView.OnScrollListener android.widget.AbsListView.OnScrollListener 概述 为了在列表或网格滚动时执行回调函数而定义的接口。 常量 public static final int SCROLL\_STATE\_FLING 用户之前通过触控滚动并执行了快速滚动。滚动动画正滑向停止点。 常量值: 2 (0x00000002) public static final int SCROLL\_STATE\_IDLE 视图没有滚动。注意,使用轨迹球滚动时,在滚动停止之前,一直处于空闲状态。 常量值: 0 (0x00000000) public static final int SCROLL\_STATE\_TOUCH\_SCROLL 用户通过触控滚动,并且手指没有离开屏幕。 常量值: 1 (0x00000001) 公共方法 public abstract void onScroll (AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) 当列表或网格的滚动已经完成时调用的回调函数。会在滚动完成后调用。 参数 view 报告滚动状态的对象视图。 firstVisibleItem 第一个可见单元格的索引(如果 visibleItemCount == 0 则忽略该参数)。 visibleItemCount 可见单元格数。 totalItemCount 列表适配器中的条目数。 public abstract void onScrollStateChanged (AbsListView view, int scrollState) 当列表视图或网格视图正在滚动是执行的回调函数。如果视图正在滚动, 该方法会在渲染下一帧之前调用该方法。就是说,会在调用任何 getView(int, View, ViewGroup)方法之前调用。 参数 view 报告滚动状态的对象视图。 scrollState 当前滚动状态。值为 SCROLL\_STATE\_IDLE、 SCROLL\_STATE\_TOUCH\_SCROLL或SCROLL\_STATE\_IDLE。 AbsListView.RecyclerListener 译者署名: cnmahj 译者链接: [http://android.toolib.net/blog/][http_android.toolib.net_blog] 版本:Android 2.3 r1 结构 继承关系 public static interface AbsListView.RecyclerListener android.widget.AbsListView.RecyclerListener 概述 RecyclerListener 是用于接收视图被移动到待回收堆中时的消息的监听器。该监听器用于释放分配到被放入回收站的视图的资源。 公共方法 public abstract void onMovedToScrapHeap (View view) 指示指定的视图被移动到待回收堆中。视图不再显示在屏幕上,关联到该视图的贵重的资源应该被释放。 scrollState 当前滚动状态。值为 SCROLL\_STATE\_IDLE、 SCROLL\_STATE\_TOUCH\_SCROLL或SCROLL\_STATE\_IDLE。 AbsListView.RecyclerListener 译者署名: cnmahj 译者链接: http://android.toolib.net/blog/ 版本:Android 2.3 r1 结构 继承关系 public static interface AbsListView.RecyclerListener android.widget.AbsListView.RecyclerListener 概述 RecyclerListener 是用于接收视图被移动到待回收堆中时的消息的监听器。该监听器用于释放分配到被放入回收站的视图的资源。 公共方法 public abstract void onMovedToScrapHeap (View view) 指示指定的视图被移动到待回收堆中。视图不再显示在屏幕上,关联到该视图的贵重的资源应该被释放。 android:descendantFocusability 属性的值有三种: beforeDescendants:viewgroup会优先其子类控件而获取到焦点 afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点 blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点 通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好了,至此listview点击的灵异事件告一段落 [http_android.toolib.net_blog]: http://android.toolib.net/blog/
相关 AbsListView中item重用机制 AbsListView中item重用机制 ListView是一个非常神奇的功能,我相信大家应该都体验过,即使在ListView中加载非常非常多的数据,比如达到成百上千条甚至更 妖狐艹你老母/ 2022年06月13日 00:26/ 0 赞/ 157 阅读
相关 AbsListView小结 1.滚动时,无论时FlingMode还是ScrollMode,最终都是调用trackMotionScroll(),其中包括了View回收的计算及执行,trackMotionSc 向右看齐/ 2022年03月10日 11:40/ 0 赞/ 123 阅读
相关 OverScroller、Scroll到edge时的阻尼效果,overScrollBy和scrollTo,AbsListView和ScrollView的滚动实现区别 OverScroller 和Scroller类似,都只是根据duration、已过去的时间,start position,final position,根据某种interpo 刺骨的言语ヽ痛彻心扉/ 2022年03月10日 10:58/ 0 赞/ 250 阅读
相关 AbsListView 结构 继承关系 public abstract class AbsListView extends AdapterView <T extends Adapter> imp 川长思鸟来/ 2022年01月09日 04:15/ 0 赞/ 114 阅读
还没有评论,来说两句吧...