通知角标(2)只用一个TextView实现
可以只用一个TextView实现通知角标,TextView的setCompoundDrawables函数可以在TextView的上,下,左,右,4条边处分别指定一个图片。见图1:
这个图片如果在角上,就能实现通知角标的功能。同时TextView只显示一个背景时就可当一个ImageView。
图1,文本四周可以插图片
优点:
不用引入其它库,或自定义一个,
缺点:
1,角标内容只能是图片,显示1-9要用9张图,如果显示21 就比较麻烦,但是通常>10可以只显示一个小红点,或者所有通知只显示红点。
2,当角标与文字重叠时,角标不是最上层,但角标不用必须压在文字之上。
3,当文本居中显示时,当响应事件时要把角票设为null,这时文字会移动重新计算位置,会产生移动,可用一张透明图片占位没有通知时的状态。
示例:
图2,效果图
代码:
1 private void initNotice(){ 2 final TextView noticeView = (TextView) tabHost.findViewById(R.id.tab_weixin_notice); 3 noticeView.setVisibility(View.VISIBLE); 4 final Drawable left = context.getResources().getDrawable(R.drawable.tab_weixin_qq_friend); 5 // 这一步必须要做,否则不会显示. 6 left.setBounds(100, 0,175 ,74); 7 Drawable right = context.getResources().getDrawable(R.drawable.notice_dot); 8 right.setBounds(-120, -10,-110 ,0); 9 noticeView.setCompoundDrawables(left,null,right,null); 10 noticeView.setOnTouchListener(new View.OnTouchListener() { 11 @Override 12 public boolean onTouch(View v, MotionEvent event) { 13 noticeView.setCompoundDrawables(left, null, null, null); 14 return false; 15 } 16 }); 17 }
注意:其中right的矩形的top,left如果不是0,那么要用负数,如果用right.setBounds(20,0,40,20)。那么图片显示不出来。