关于Custom View初步研究
来源:互联网 发布:php the right way 编辑:程序博客网 时间:2024/05/29 04:59
关于Custom View初步研究
今日做了一个配置切换器,直接写在Activity上面,给我的感觉就像C语言直接main函数里面一样,决定把它拖出来,做成一个部件。
写了一个layout.xml 继承了LinearLayout。然后一直在纠结怎么把xml inflate到自己的ViewGroup类里面。由于在家里,没有参考代码。只能自己拍脑袋空想。于是想出来第一个办法:
在构造函数里面加AddView。东西出来功能正常了,但是本应该与屏幕同宽的,发现没有这样,以为xml没写match_parent,但是真的写,然后乱改xml,效果还是一样。于是继续拍脑袋空想。。终于悟道了一些东西。
上图是HierarchyViewer(以下简称Viewer)显示出来的ViewTree。下面一棵树为我自己的Activity。从FrameLayout开始是走自己xml。
层次关系为:
LinearLayout
----ToggleBarView
----LinearLayout
----ToggleButton
----ToggleButton
----ToggleButton
----ToggleButton
----ToggleButton
ToggleBarView为自定义的ViewGroup。里面包含一个LinearLayout,从Viewer显示出来,LinearLayout里面的Layout是正常的,错就在ToggleBarView后面多出了一块空白区域,所以,错误肯定不在LinearLayout以下的层次里,必定在ToggleBarView这一层。如果是xml错了,要改也是改与ToggleBarView下面的一个节点(直接子节点)(如果改ToggleBarView自己,也就是在main xml里面ToggleBarView只是改变ToggleBarView的性状,比如让她在整个屏幕左边,右边,扁,长条等等),也就是xml文件的根节点。。但是这个根节点怎么改也不会好
后面看了看这个LinearLayout的LayoutParams,发现width与height都是WRAP_CONTENT与xml里面的match_parent不一样,于是查代码,AddView(View v)他说如果v没有LayoutParams,那么将使用默认的LayoutParams。单步调式了下Inflate LinearL的过程。发现返回的LinearLayout果然是没有LayoutParams的,于是问题就是为什么没有生成LayoutParams,原因貌似是没有Parent,那么又为什么会没有Parent的呢,这个目前不知道,没有framework的代码。可能要研究下整个Inflate的过程才能知道。目前先不研究。既然知道没有LayoutParams那么就手动配一下LayoutParams。使用addView(View v LayoutParams lp)来添加View。调式一下,恩,OK
其实还有一种方法。因为ToggleBarView继承LinearLayout。可以直接在main xml 里面的ToggleBarView标签下面添加child。就和使用LinearLayout一样。这样也不用自己去管LayoutParams的事情,一切都会很正常。但是会有一些问题。
因为这个部件功能单一,就5个按钮,多一个、少一个,id不对都不行,这些东西不应该让用户去配。用户也不一定知道怎么配。这也是实现封装的一种体现吧。所以不应该把它写在ToggleBarView里面,虽然可以这么写。不符合封装性的思想。
根本的解决方法应该是研究为什么根节点的属性会没有生成。。
- 关于Custom View初步研究
- 关于Tinkerpatch的初步研究
- custom view
- Custom View
- 关于socket的一些初步研究
- 关于socket的一些初步研究
- 关于ExtJS5的初步研究(二)
- 关于socket的一些初步研究
- 关于插件式软件设计的初步研究
- Creating a Custom View
- ActionBar - Custom view
- 2501-View-custom
- Custom Container View Controller
- Android custom view
- Custom Container View Controller
- Custom Container View Controller
- Custom Container View Controller
- Android Custom View NullPointerException
- 你能答出几个——嵌入式招聘的C语言测试题
- java中的回调函数
- Oracle 函数
- 由newInstance抛出异常所想到的
- TB Java开发环境搭建
- 关于Custom View初步研究
- tinyxml使用
- Extjs3.x 为GridPanel 排序 行拖拽 行数据上移 行数据下移
- 通过建立hash表快速搜索资源
- 线段树和单调队列优化DP---POJ2373解题报告
- [forward]something about multitouch
- android开发笔记
- 关于org.hibernate.ObjectNotFoundException: No row with the given identifier exists 的快捷解决问题
- mysql 整型 数据宽度, 字段的零填充和符号