沉寂这么多天,一直在搞安卓开发,刚有些眉目,今天分享一个textview 部分点击事件的实现方法。这个功能主要用到的是SpannableString 这个安卓自带类。详细代码如下:
@Override
public View getView(int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub LinearLayout ll =null; if(convertView==null){ ll=(LinearLayout) View.inflate(context,R.layout.comment_format_setting ,null); }else{ ll = (LinearLayout) convertView; } TextView name = (TextView) ll.findViewById(R.id.username_text); //用户名称 TextView time = (TextView) ll.findViewById(R.id.time_text); //时间 TextView commcontent_text = (TextView) ll.findViewById(R.id.commcontent_text); //评论主体内容 TextView blogcontent_text = (TextView) ll.findViewById(R.id.blogcontent_text); //微博内容主体 name.setText(AllDateList.get(position).get("uname")); time.setText(AllDateList.get(position).get("stime")); commcontent_text.setText( getClickableSpan( position)); //设置SpannableString 为textview的内容 commcontent_text.setMovementMethod(LinkMovementMethod.getInstance()); //一定要加上,这个是为了激活点击事件,不加则不会触发点击事件。 blogcontent_text.setText(AllDateList.get(position).get("pcon")); return ll; } private SpannableString getClickableSpan(int position) { OnClickListener l = new OnClickListener(){ @Override public void onClick(View v) { Toast.makeText(context, "Click Success", Toast.LENGTH_SHORT).show(); Log.v("atme", "点击了"); } };SpannableString spanableInfo = new SpannableString(AllDateList.get(position).get("scon"));
int start = 0; int end = 4; spanableInfo.setSpan(new Clickable(l), start, end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return spanableInfo; }class Clickable extends ClickableSpan implements OnClickListener{
private final OnClickListener mListener;public Clickable(View.OnClickListener l){
mListener = l; }/** 设置显示格式**/
@Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(context.getResources().getColor(R.color.atuser)); ds.setUnderlineText(false); //设置下划线 }@Override
public void onClick(View v){ mListener.onClick(v); }}
红色部分标注是一些要注意的地方,尤其 是激活点击事件,一定要加上,就是因为这个没加浪费了我好长时间,如果要想在一个textview 中加多个点击事件,刚添加多个
spanableInfo.setSpan(new Clickable(l), start, end,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);