使用github上的一个jar包,叫做BadgeView。
首先下载badgeview下载
使用方法一:
将badgeview.jar加入到所创建的android工程的libs文件夹下,右键点击builder path --> add to build path即可。
使用方法二:
将BadgeView导入eclipse,作为库文件(isLibrary),即可。
下面以一个例子来说明该jar包的实际用法:
github上的代码说明是:
<span style="font-family:Microsoft YaHei;">BadgeView badge = new BadgeView(getActivity());
badge.setTargetView(myView);
badge.setBadgeCount(42);</span>
本例用一个listView模拟qq消息页收到的消息,在每条消息右侧用红色圆点来显示收到的消息数目。当点击过消息,跳入到消息页面,再次返回时,该消息已被查看过,右侧红色圆点消失。
主要代码:
public class MainActivity extends ActionBarActivity {
private ListView listView;
private String[] datas = new Cheeses().sCheeseStrings;
private MyAdapter adapter;
private int[] tags = new int[datas.length];// 默认为0,标记为1代表已经点过
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.lv_list);
adapter = new MyAdapter();
listView.setAdapter(adapter);
}
@Override
protected void onResume() {
super.onResume();
adapter.notifyDataSetChanged();
}
public class MyAdapter extends BaseAdapter {
ViewHolder holder = null;
@Override
public int getCount() {
// TODO Auto-generated method stub
return datas.length;
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = getLayoutInflater().from(MainActivity.this)
.inflate(R.layout.item_list, null);
holder = new ViewHolder();
holder.tv = (TextView) convertView.findViewById(R.id.tv_text);
<strong>holder.badgeView = new BadgeView(MainActivity.this);
holder.badgeView.setTargetView(holder.tv);
holder.badgeView.setGravity(Gravity.RIGHT | Gravity.TOP);</strong>
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv.setText(datas[position]);
holder.badgeView.setBadgeCount(datas[position].length());
if (tags[position] == 1) {
<strong>holder.badgeView.setVisibility(View.GONE);</strong>
}
convertView.setOnClickListener(new MyOnClickListener(position,
MainActivity.this));
return convertView;
}
class ViewHolder {
TextView tv;
BadgeView badgeView;
}
class MyOnClickListener implements View.OnClickListener {
Context context;
int position;
public MyOnClickListener(int position, Context context) {
this.position = position;
this.context = context;
}
@Override
public void onClick(View v) {
tags[position] = 1;// 标记已点击
// 跳转到消息界面
Intent intent = new Intent(MainActivity.this,
MessageActivity.class);
startActivity(intent);
}
}
}
}
用tags[]数组来标记每一条是否点击过是一个不错的方法来防止listview条目重绘时出现的红色圆圈显示错乱的现象。
除了例子中队badgeview的使用,还有其他代码功能:
counterBadge.incrementBadgeCount(1);//设置增加的消息数目,即在原基础上加上设置的数目
textStyleBadge.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC));//设置样式
textStyleBadge.setShadowLayer(2, -1, -1, Color.GREEN);//设置阴影
backgroundShapeBadge.setBackground(12, Color.parseColor("#9b2eef"));//设置背景
backgroundDrawableBadge.setBackgroundResource(R.drawable.badge_blue);//设置背景
等等。。。
运行效果
点击每一条后:
返回后: