
Android Layout
文章平均质量分 71
fyfcauc
这个作者很懒,什么都没留下…
展开
-
Wallpaper模块(2)
Wallpaper模块(2):WallPaperFragment extends ButtonReceiveFragment,后者是项目的一个基础类,作用很简单,在被attach到某个Actviity时,如果Actviity是一个ButtonProvider,那么该fragment就会将自己register到该Activity以在Activity收到onKeyDown时,会被通原创 2015-03-13 16:54:22 · 821 阅读 · 0 评论 -
FrameLayout中移动childView
今日偶然想起了在某个FrameLayout中通过childView.layout()来实现移动childView的code.又想到FrameLayout在自己的onLayout中基本只考虑child layout_gravity/margin/padding 这个因素,其他的一律按照对齐到原点来排列.那么通过childView.layout()来移动childView,但是如果其paren原创 2015-03-11 15:28:30 · 878 阅读 · 0 评论 -
Tab 模块 (四)
Tab 模块 (四)TabViewListView是真正负责显示TabView,以及相关TabView交互的View,extends AdapterView, 使用AdapterView而不是更为现成的ListView的原因是,ListView虽然在展现List方面很方便很现成,但是ListView不支持对某个ListItem的Touch复杂交互,要在ListView的基础原创 2015-03-08 17:44:10 · 686 阅读 · 0 评论 -
Download模块 (三)
Download模块 (三)DownloadConfirmDialog是UI流程中最先呈现给用户的V,让用户选择download存储的位置,名称以及在普通下载与转存网盘之间做选择.这里采用了Fragment来作为实现手段,UI上的 存储方式的界面选择 采用了ViewPager实现。DownloadConfirmDialog类还implements了 OnClickLis原创 2015-02-27 14:53:24 · 680 阅读 · 0 评论 -
android View onMeasure
基于4.4 code:View.java: protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),原创 2014-12-12 14:12:21 · 430 阅读 · 0 评论 -
Night模块(一)
Night模块(一)Night模块是前期的试手项目,虽然比较简单,不过因为本blog的目的就是记录所有自己的工作点滴,因此这个也不会漏掉.NightMode其中一个组件就是提供一个夜间日间模式切换的动画,产品和设计给的设计稿就是一个太阳/月亮按照某种可计算的轨迹升起/落下,并且伴随着整个APP界面的渐变亮/暗.此UI组件NightToggleAnimatioVi原创 2015-03-10 22:04:40 · 633 阅读 · 0 评论 -
android requestLayout等重绘分析
基于4.4.3ViewRootImpl.java scheduleTraversals()会先判断是否有 mTraversalRunnable 被post到 mChoreographer那里,如果没有,那么就post一个mTraversalRunnable(CALLBACK类型是Choreographer.CALLBACK_TRAVERSAL)到mChoreogr原创 2014-11-04 11:36:57 · 1641 阅读 · 0 评论 -
DownLoad模块 (五)
DownLoad模块 (五)DownloadItemView代表DownloadFragment上每一个Download对应的View,展示该Download的进度,状态,名称等信息。设计为base abstarct class。DownloadItemView直接extends LinearLayout, 又承担一部分的C,实现了onClickListener和 onLongCl原创 2015-02-27 17:49:54 · 647 阅读 · 0 评论 -
getWindowVisibleDisplayFrame DisplayUtil.getScreenSize() VKB影响
getWindowVisibleDisplayFrame得到的rect的尺寸是受VKB出现/消失的影响的。而DisplayUtil.getScreenSize()则不会.原创 2015-02-04 18:16:21 · 643 阅读 · 0 评论 -
android 自定义 xml 属性
按照http://www.cnblogs.com/kross/p/3458068.html以及http://gundumw100.iteye.com/blog/1040917尝试了一把自定义xml tag, 很简单,按部就班来就基本不会有问题,在最后一步犯2了,在引入自己新的自定义的xmlns时,应该在使用了自定义VIew的layout xml文件中使用,而不是在 自定义view本原创 2014-12-15 11:01:05 · 554 阅读 · 0 评论 -
Tab 模块 (五)
Tab 模块 (五)TabViewListAdapter extends BaseAdapter.Adapter承载了M和C的角色, 同时因为自己实现的ListView没有实现convertView机制,因此在Adapter里面搞了一套View cache机制来提升性能.而由此也引入了ViewHolder这个优化手段,直接将View的每个子View的引用也用这种方式ca原创 2015-03-09 14:26:17 · 694 阅读 · 0 评论 -
一个 forceLayout() 和 requestLayout() 的测试
两个view:一个是系统默认的FrameLayout, A 一个是自己自定义的MyView extends View,重载了onMeasure函数(): B @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // TODO Auto-generated me原创 2014-12-12 16:24:42 · 7388 阅读 · 0 评论 -
Android的FrameLayout使用要注意的问题
From: http://blog.youkuaiyun.com/pocoyoshamoo/article/details/9722399?utm_source=tuicool帧布局FrameLayout在Android的五大布局中是最简单的布局方式,在需要布局中的控件有重叠的情况下才使用。 今天Shamoo使用FrameLayout的时候,发现布局里面的控件设置layout_margi转载 2015-03-10 11:17:27 · 1162 阅读 · 0 评论 -
LinearLayout 对各种layout_width/height的展现
项目中LinearLayout和FrameLayout的使用是最多的,FrameLayout对种layout_wd简单整理总结一下LinearLayout对各种Layout_width/height的展示:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:la原创 2015-03-09 10:14:49 · 516 阅读 · 0 评论 -
Dragger模块
Dragger模块Dragger模块是项目的一个base模块,用于实现对所挂接View的drag位移.这个模块设计的理念很好,体现了V 和 C 完全独立分离的思想,随便一个View,被Dragger挂接上即可在parent内跟随Touch移动.其实本质上就是之前Tab模块中封装的TouchController,只不过这里直接将其独立出去,将要drag的View也作为To原创 2015-03-11 21:28:47 · 685 阅读 · 0 评论 -
android View TranslationX/Y
基于4.4今天简单测试了下View的 TranslationX/Y的效果,代码注释写的其实很含糊,起码没有写出这个属性的影响:* The horizontal location of this view relative to its {@link #getLeft() left} position.* This position is post-layout, in addition原创 2015-01-28 15:26:35 · 2006 阅读 · 0 评论 -
generateDefaultLayoutParams()
在ViewGroup, 以及几种基本的Layout类中都有这个函数,分别生成自己所定义扩展的LayoutParams, 在某个Layout中需要生成一个LayouParamst的时候,可以方便使用无需自己根据当前所处Layout的类来确定new哪一种LayoutParams./** * Returns a set of default layout parameters.原创 2015-01-16 15:03:48 · 1850 阅读 · 0 评论 -
ListView adapter notifyDataSetChanged() track
ListView 为了方便使用,自己在setAdapter()的时候就会register 一个新的AdapterDataSetObserver,以响应之后的adapter的notifyDataSetChanged(),本质就是一个观察者模式的实现:@Override public void setAdapter(ListAdapter adapter) { if (mA原创 2014-12-29 11:34:44 · 935 阅读 · 0 评论 -
android View onDraw被调用判断
static final int PFLAG_DIRTY = 0x00200000; /** * View flag indicating whether this view was invalidated by an opaque * invalidate request. * * @hide原创 2014-12-25 21:31:19 · 1075 阅读 · 0 评论 -
setWillNotDraw
/** * If this view doesn't do any drawing on its own, set this flag to * allow further optimizations. By default, this flag is not set on * View, but could be set on some View subcla原创 2014-12-22 09:53:19 · 397 阅读 · 0 评论 -
android View类及View派生类的 measure/layout 相关方法实现 调查
View: public final void measure(int widthMeasureSpec, int heightMeasureSpec) {//有实现,祖祖辈辈用一套}public void layout(int l, int t, int r, int b) {//有实现}protected void onMeasure(int width原创 2014-12-12 18:27:07 · 632 阅读 · 0 评论 -
activity setContentView 解析
基于 android 4.4 src:Activity 的 setContentView():public void setContentView(View view, ViewGroup.LayoutParams params) { getWindow().setContentView(view, params); initActionBar();原创 2014-11-21 10:56:34 · 460 阅读 · 0 评论 -
Android LayoutInflater & Theme
LayoutInflater创建View的流程:createViewFromTag(View parent, String name(View在xml中的名称), AttributeSet attrs): 如果name就是”view”, 那么会从attrs中找出一个名称为”class”的xml属性的value作为name.如果定义了mFactory2/mFactory/mPrivateFacto原创 2016-03-24 15:54:00 · 798 阅读 · 0 评论 -
ImageView的测量与绘制机制解析
mAdjustViewBounds属性True when ImageView is adjusting its bounds to preserve the aspect ratio of its drawable如果允许adjustViewBounds,ScaleType会强行设置为FIT_CENTERMaxWidth/MaxHeight机制: 要生效的话,必须setAdjustViewBou原创 2016-11-18 16:45:17 · 962 阅读 · 0 评论 -
RecyclerView 原理机制 宏观总结
RecyclerView源码整体基本读完,先贴个宏观上的总结.RecyclerView可以看作是AbsListView的进化版,在结构设计和模块划分上有了极大的进步,核心是将各项功能独立为模块,然后组合在一起构成RecyclerView。 1. AdapterHelper: Update行为记录/整合/分发系统(时序魔法师,扮演了RecylerView和LayoutManager之间的Po原创 2017-01-06 17:56:02 · 3805 阅读 · 1 评论 -
RecyclerView机制解析: ChildHelper
RecyclerView在处理消失动画时采用了和Animation/LayoutTranslation相似的策略:某个ChildView需要渐变消失动画效果,那么该ChildView在动画结束前不会从ViewGroup中被remove掉,在动画运行完以后才会被remove掉。上述策略显然会造成不一致:Data中,ChildView对应的Item已经被remove了(数据remove不会因为有动画就延原创 2017-01-07 15:58:28 · 2681 阅读 · 0 评论 -
Android Measure 体系简单总结
Android对View的测量是半协商半强制半模糊半具体的.测量过程中的两套尺寸体系: [半强制] ParentView**约束ChildView: **MeasureSpec(通过measure方法传递给ChildView, MeasureSpec本身包含了两类信息: SpecMode和SpecSize): SpecMode = EXACTLY: 给ChildView指定了具体尺寸[半具体]原创 2017-01-09 14:04:55 · 1795 阅读 · 0 评论 -
RecyclerView机制解析: Measure
RecyclerView将布局的职责委托给了LayoutManager类,而测量和布局联系很紧密,因此测量的一部分逻辑也被委托给了LayoutManager,RecyclerView大多数情况下会基于LayoutManager布局之后的ChildView分布情况来决定自己的最终尺寸。RecyclerView支持两种measure模式,取决于LayoutManager的mAutoMeasure属性:原创 2017-01-09 17:50:13 · 2905 阅读 · 0 评论 -
RecyclerView机制解析: ItemDecoration
RecyclerView的ItemDecoration机制相对比较简单,不过扩展性很强,在ChildView的测量和展示上为使用者提供了极大的发挥空间,像divider/项目高亮/项目边框等效果都可以轻松实现ItemDecoration可以同时存在复数个,维护在一个列表中,影响是可以叠加的,ItemDecoration的作用顺序从列表头到列表尾。addItemDecoration可以添加一个Ite原创 2017-01-09 19:10:09 · 3839 阅读 · 0 评论 -
RecyclerView机制分析: State
State是最简单的RecyclerView子模块。RecyclerView在工作过程中,需要维护一系列状态信息(比如当前处于Layout的哪个阶段,是否处于preLayout阶段等)。并且因为RecyclerView将功能进行了子模块化,还需要传递某些信息到特定子模块来完成功能/通信,RecyclerView把这部分职责集中到了State模块中。State**内部聚合了所需的各项状态信息,扮演了原创 2017-01-11 15:04:44 · 3119 阅读 · 0 评论 -
关于RecyclerView的一些概念
在使用RecyclerView或者阅读其源码前最好明确一些术语代表的概念,脱离具体实现细节,在抽象设计层思考RecyclerView 背后的模型。先以RecyclerView的一个表现形式,一个可以上下滑动的列表作为切入点: 我们为什么偏向使用ListView/RecyclerView而非ScrollView+LinearLayout作为列表的实现方案? 因为列表的长度可能是很长的。从理想的使用原创 2017-01-12 16:32:51 · 972 阅读 · 0 评论 -
LinearLayout measure过程中的几次遍历分析
measure过程中的5次遍历childView:GONE/Null的ChildView基本都被直接忽略.第一次遍历: weight能够在第一次遍历中生效的前提是: parent传递的heightMode是EXACTLY, 这样,设置了weight的childView在这次遍历中就不会被measure,而只是将其topMargin/bottomMargin累加到mTotalLength中去,原创 2016-02-03 16:50:13 · 1086 阅读 · 0 评论 -
Android Choreographer 源码笔记
之前有写过一篇粗略分析的文章: http://blog.youkuaiyun.com/fyfcauc/article/details/43307253 不过还是不够,这次再专门细读一下:Choreographer主要被外部使用的函数是postCallback(…), 就是在Choreographer中schedule一个Task,这个Task何时运行,则是是由Choreographer来自行安排,满足作S原创 2015-06-19 16:57:16 · 1405 阅读 · 0 评论 -
onFinishInflate() 跟踪
基于android 4.4.1: /** * Finalize inflating a view from XML. This is called as the last phase * of inflation, after all child views have been added. * * Even if the subclass ov原创 2014-11-05 14:08:43 · 1460 阅读 · 0 评论 -
ViewFlow 源码阅读笔记(1)
1. ViewFlow, 继承自AdapterView, 基本和ViewPager差不多,不过可以动态的增加View, 自行维护了一个SideBuffer*2大小的view buffer, 提升用户体验,可以作为xml属性设置。 A horizontally scrollable ViewGroup with items populated from an Adapter.原创 2015-05-05 11:24:04 · 556 阅读 · 0 评论 -
Android Adapter机制 源码笔记(7): AbsListView(3)
AbsListView的setAdapter函数其实没有替换和保存新的Adapter, 也没有触发UI重绘等,只是简单的将mCheckStates/mCheckedIdStates清空, 是重点子类override函数, AbslListView中关于Item**check和select的处理逻辑还是很多的,但是这一块逻辑反而平时开发基本不会涉及(很少有需求对这些功能进行高度定制的)**setOn原创 2015-05-20 12:29:33 · 1186 阅读 · 0 评论 -
Android Adapter机制 源码笔记(6): AbsListView(2)
AbsListView中的回收器: RecycleBin: RecycleBin实现了在一次一次的layout的过程中对于View的回收重用机制, 有两层的的view storage: ActiveViews层和ScrapViews层. 其中,ActionView层指的是layout开始时就展现在screen上的那些view,在layout完成以后, 所有在ActionViews层的view都会降级原创 2015-05-19 10:46:19 · 544 阅读 · 0 评论 -
ViewFlow 源码笔记(2)
为了在手势操作的阈值判断上和系统保持一致,在init()的时候据根据传入的context取得了ViewConfiguration:final ViewConfiguration configuration = ViewConfiguration.get(getContext()), 这个函数就是根据context对应的display的dimension/density(当前的实现中是density)原创 2015-06-19 14:42:16 · 993 阅读 · 0 评论 -
Android Adapter机制 源码笔记(5): AbsListView(1)
abstract class AbsListView extends AdapterView implements ……..: 注意,AbsListView里的”List”指的是这个View的data set形式是list(有点不准确),而非这个View真的是一个ListView的形式, 其呈现形式也是完全自定的(layoutChildren()由子类来确定自己的layout方式)里说的很清楚了.原创 2015-05-19 10:45:05 · 657 阅读 · 1 评论 -
Android Adapter机制 源码笔记(4): AdapterView
abstract class AdapterView extends ViewGroup: 注释已经将其定位解释的很好了: An AdapterView is a view whose children are determined by an link Adapter. AdapterView的家族还是挺庞大的, 除了Android自带的ListView/GridView/Spinne原创 2015-05-19 10:44:42 · 940 阅读 · 0 评论