Android 一些Api说明

来源:互联网 发布:淘宝家装类目 编辑:程序博客网 时间:2024/06/16 11:44

做上层App开发,对上层原生的一些View的定制、重写,熟悉它们的API很有必要,在这里记录一些,

曾经遇到过的,感觉比较有用的API


ViewParent

bringChildToFront(View child); 把该视图置于其他所有子视图之上,如在FrameLayout中切换被叠放的视图。 
ViewManager : updateViewLayout(View view, ViewGroup.LayoutParams params); //更新LayoutParams


View 
public void getHitRect(Rect outRect); 获取当前view在父view中的矩形范围,需要在测量后才能获取
public void getLocationInWindow(int[] location); window中的位置 (比如dialog就是一个window,它里的location与screen中的location坐标是不一样的)
public void getLocationOnScreen(int[] location); screen中的绝对位置
public void getFocusedRect(Rect r); 默认返回drawingRect. 如果对于焦点view含有其它的想法:如cursor、选中的行或列,那么需要重写该方法,并fill rect
public final boolean getGlobalVisibleRect(Rect r); 返回view在屏幕中的可见区rect。  true表示有可见区,false无
public boolean getGlobalVisibleRect(Rect r, Point globalOffset); //globalOffset也是传入参数,内部set它的值
if (globalOffset != null) {
                globalOffset.set(-mScrollX, -mScrollY);
            }
    public final boolean getLocalVisibleRect(Rect r); 返回view相对于自身左顶点的rect区


AbsListView
public int pointToPosition(int x, int y); 返回点(x,)所在item的position


ViewGroup extends View implements ViewParent, ViewManager
getChildDrawingOrder返回当前迭代子视图的索引,即获取当前正在绘制的视图索引.
     如果需要改变ViewGroup子视图绘制的顺序,则需要重载这个方法.并且需要先调用 setChildrenDrawingOrderEnabled(boolean) 方法来启用子视图排序功能.
isChildrenDrawingOrderEnabled()  获取当前这个ViewGroup是否是按照顺序进行绘制的.
setClipToPadding(boolean);  否要在他应有的边界内进行绘制android:clipToPadding
setClipChildren(boolean);  子是否要在他应有的边界内进行绘制android:clipChildren




RecyclerView不再负责Item的摆放等显示方面的功能。所有和布局、绘制等方面的工作,被拆分成不同的类进行管理。
所以开发者可以自定义各种各样满足定制需求的的功能类。面是一些和RecyclerView相关的非常重要的类列表。
RecyclerView.Adapter:包装数据集合并且为每个条目创建视图。
RecyclerView.ViewHolder:保存用于显示每个数据条目的子View。
LayoutManager:将每个条目的视图放置于适当的位置。
ItemDecoration:在每个条目的视图的周围或上面绘制一些装饰视图。
ItemAnimator:在条目被添加、移除或者重排序时添加动画效果。
itemview有焦点时,key操作才能滚动、换页;
RecyclerView 本身也没有处理item事件的接口,需要自行添加


public static abstract class Adapter<VH extends ViewHolder>定义在RecyclerView内部
public abstract VH onCreateViewHolder(ViewGroup parent, int viewType);  //创建viewHolder
public abstract void onBindViewHolder(VH holder, int position);//bindViewHolder




public static abstract class LayoutManager    定义在RecyclerView内部
getItemCount()内部调用adapter.getItemCount()
getColumnCountForAccessibility(null, null)返回spanCount -- 分隔列数
getRawCountForAccessibility(null, null)返回spanCount -- 分隔行数


StaggeredGridLayoutManager extends RecyclerView.LayoutManager
findViewByPosition(int position);  
findFirstCompletelyVisibleItemPositions(int[] into);  首次完全可见的view位置,参数传入空数组。若是纵向,length为列数;横向为行数
findLastCompletelyVisibleItemPositions(int[] into);
findFirstVisibleItemPositions(int[] into); 首次可见的view位置(即使部份可见)
findLastVisibleItemPositions(int[] into);
View findContainingItemView(View view);
LinearLayoutManager extends RecyclerView.LayoutManager
findViewByPosition(int position);  
findFirstCompletelyVisibleItemPosition(); 首个完全可见的View位置
findLastCompletelyVisibleItemPosition();
findFirstVisibleItemPosition(); 首个可见位置(即使部份可见)
findLastVisibleItemPosition();
View findContainingItemView(View view);


Activity
getWindow().getDecorView(); decorView是window中的最顶层view
getWindow().getDecorView().getWindowVisibleDisplayFrame(rect); 获取到程序显示的区域,包括标题栏,但不包括状态栏   rect.top = 状态栏高度
getWindow().findViewById(Window.ID_ANDROID_CONTENT); 获取window中程序实际所在view区域 不含标题栏、状态栏
getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop() - rect.top = 标题栏的高度




1 0