Android中为ViewGroup设置selector无效果
2014-04-11 14:31
218 查看
今天做项目的时候, 领导想要一个类似于QQ中的设置的界面, 就是那种使用圆角边框做背景的显示效果。 如下:
每个条目点击之后会显示不同的颜色, 如下:
这种效果其实实现起来很简单, 圆角边框使用shape图形做背景。 条目点下去显示不同颜色的效果使用背景选择器selector。 shape和selector都是android中的图像元素。 我使用shape图形设置了圆角, 并做为背景, 设计出了如下的简单界面:
上图中上下两部分和中间的分割线都放在一个垂直方向的线性布局中, 这个线性布局使用一个圆角的shape做背景。 上下两个条目都是一个RelativeLayout 。
下一步就是为每个条目设置背景选择器selector , 以使点击条目时显示蓝色做为背景。 我为上图中的第一个条目写的背景选择器round_corner_top_item_bg.xml如下:
然后为第一个条目设置背景:
本来以为超级简单, 但是在测试程序时, 这个selector无论如何也没有任何效果!!!将这个selector文件检查了很多遍, 没发现什么错误。 这让我很抓狂啊。 然后想到是不是因为是为ViewGroup设置的selector而不是为单一的控件设置的selector。 所以, 我在布局中加入了一个Button, 然后把这个selector设置到Button上, 它是有效果的。 难道ViewGroup不能使用selector吗? 在网上搜了半天, 也没有找到答案。
所以决定先写代码逻辑, 在代码中为这个条目设置点击监听:
这时候奇怪的事情发生了! selector竟然有效果了!
真是让人无语啊。 搞了半天, 也不知道什么原因。
所以。 如果为一个ViewGroup设置了Selector, 但是没有效果, 那么在代码中为这个ViewGroup先设置OnClick事件, 可能就会解决这个问题!
到此为止, 我也没想出来原因。 估计和Android组件的事件传递机制相关。 有知道原因的读者还希望不吝赐教。
每个条目点击之后会显示不同的颜色, 如下:
这种效果其实实现起来很简单, 圆角边框使用shape图形做背景。 条目点下去显示不同颜色的效果使用背景选择器selector。 shape和selector都是android中的图像元素。 我使用shape图形设置了圆角, 并做为背景, 设计出了如下的简单界面:
上图中上下两部分和中间的分割线都放在一个垂直方向的线性布局中, 这个线性布局使用一个圆角的shape做背景。 上下两个条目都是一个RelativeLayout 。
下一步就是为每个条目设置背景选择器selector , 以使点击条目时显示蓝色做为背景。 我为上图中的第一个条目写的背景选择器round_corner_top_item_bg.xml如下:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:state_focused="false"> <shape> <corners android:topLeftRadius="5dp" android:topRightRadius="5dp"/> <solid android:color="#257AC1" /> <stroke android:width="0dp"/> </shape> </item> <item > <shape> <corners android:topLeftRadius="5dp" android:topRightRadius="5dp"/> <solid android:color="#FFFFFF" /> <stroke android:width="0dp"/> </shape> </item> </selector>
然后为第一个条目设置背景:
android:background="@drawable/round_corner_top_item_bg"
本来以为超级简单, 但是在测试程序时, 这个selector无论如何也没有任何效果!!!将这个selector文件检查了很多遍, 没发现什么错误。 这让我很抓狂啊。 然后想到是不是因为是为ViewGroup设置的selector而不是为单一的控件设置的selector。 所以, 我在布局中加入了一个Button, 然后把这个selector设置到Button上, 它是有效果的。 难道ViewGroup不能使用selector吗? 在网上搜了半天, 也没有找到答案。
所以决定先写代码逻辑, 在代码中为这个条目设置点击监听:
titleLayout.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i("xxx", "click title"); } }) ;
这时候奇怪的事情发生了! selector竟然有效果了!
真是让人无语啊。 搞了半天, 也不知道什么原因。
所以。 如果为一个ViewGroup设置了Selector, 但是没有效果, 那么在代码中为这个ViewGroup先设置OnClick事件, 可能就会解决这个问题!
到此为止, 我也没想出来原因。 估计和Android组件的事件传递机制相关。 有知道原因的读者还希望不吝赐教。
相关文章推荐
- Android在xml中设置组件风格(圆角,点击效果selector,边框,进度条风格,动画)TextView文字透明度
- Android通过selector选择器设置Button或者textview的背景颜色,字体颜色
- Android ViewGroup点击效果(背景色)
- android 设置textview中划线效果
- Android——图片设置为高斯模糊效果(ImageView)
- Android自定义ViewGroup自动换行实现滑动任意布局及事件处理效果
- Android ImageView的selector效果实例详解
- android中TextView中如何设置水平滚动效果
- Android动画学习(四)之为ViewGroup中的Layout设置动画实例
- Android设置透明、半透明等效果 Button ImageView
- Android自定义ViewGroup实现标签浮动效果
- android-使用ViewGroup实现左右滑动切换界面的效果
- Android继承ViewGroup实现Scroll滑动效果的方法示例
- Android动画效果之自定义ViewGroup添加布局动画
- android中设置TextView/Button 走马灯(Marquee)效果示例
- Android textview 代码中设置粗体效果
- 当前ViewGroup背景设置系统背景并增加颜色滤镜效果
- Android UI设计系列之HTML标签实现TextView设置中文字体加粗效果(6)
- Android 属性动画(Property Animation 给按钮的添加添加动画效果,同样可以用在整个布局上) (下)(viewGroup创建对象竟然可以用布局的id)
- Android自定义ViewGroup实现弹性滑动效果