Android ViewGroup(Layout)使用注意事项(I)

作者: rain 分类: 移动 发布时间: 2011-11-17 21:27 6 条评论

本文将探讨组合View(Layout)使用不当表现出的怪异显现,并在下篇文章分析产生的具体原因。

 

首先来看看具体的示例

 

在开发Android app 的时候 ,大多数情况下我们都需要使用到组合View,例如一个具有图标装饰的两行文本内容,可以通过如下组合View来实现。

在该组合View具有点击事件的时候,我们可以通过如下代码设置:

示例一:在一个页面显示多个组合View,Layout代码如下

 

该布局实现的效果如下图所示(以前在GoogleCode上的图片由于违反了GoogleCode的使用协议,现在被删除了, 所以从GAE博客上转过来的文章就不提供图片了.)

通过指定LinearLayout的clickable(如果在代码中设置了OnClickListener则会自动设置该属性)和focusable属性

android:clickable=”true”  android:focusable=”true” 则 每个组合View都可以通过轨迹球(导航键)来获取焦点同时点击每个组合View也可以显示焦点状态, 这种使用方式是正常的.

 

 

示例二:自定义组合View

 

但是在某些情况下该组合View的显示属性(显示的图标,上下两行文本内容)是根据其他数据模型获取的,为了简化编程 可能会使用一个自定义View来封装这个组合View的实现。如下

 

Layout 文件 icon_text_view.xml 的代码

 

自定义组合View IconTextView类代码如下

然后在代码中 动态添加IconTextView到Layout中,代码如下

 

程序运行截图如下

这个时候会出现一个怪异显现,IconTextView在Press状态下 没有显示出对应的状态(背景图片没有改变为Press状态下的图片)

如果要解决Press状态下的背景图片问题,则可以设置 icon_text_view.xml 文件中的clickable为true
android:clickable=”true” 这样 IconTextView 组合控件的Press的时候也可以正常显示Press下的背景图片了。
这个时候显示状态是正常了,但是又引入了一个新的问题:IconTextView的点击事件没了(用户点击该组合View没有收到IconTextView的OnClickListener事件)。

为什么直接在布局文件中使用组合View可以正常显示Press状态并且可以响应点击事件
而使用IconTextView封装这个组合View就出现Press状态和点击事件这种鱼与熊掌不可兼得的问题了呢?

本文出自 云在千峰,转载时请注明出处及相应链接。

本文永久链接: http://blog.chengyunfeng.com/?p=229

Ɣ回顶部