實現評論,回覆功能
阿新 • • 發佈:2019-02-20
實現跟qq空間和朋友圈一樣的評論,回覆功能,一個textView中的文字,有的字型顏色不同,而且具備點選效果,之前想辦法用多個textview來實現,但是碰到換行的問題,然後就用了個相對佈局把回覆的textview疊加在別的textview上面,但是這樣一來要計算評論人和回覆人的textview的文字長度,但是這樣會遇到另外一個問題就是需要耗時操作,會直接卡在那裡(ANR),開子執行緒也是行不通。應為這個我是用2個listview巢狀在一起來實現的,第二個listview是需要動態計算長度的。最終用了以下的方法,便可以輕鬆實現
方法如下
//需要非常注意的是:設定部分字型顏色的程式碼必須寫在設定文字點選事件的下面,不然設定字型顏色會沒有效果(預設是綠色的),之前看網上很多資料都沒介紹到這個點,結果自己查了老半天都沒搞定,最後改變了一下字型效果就成功了
final String replyNickName = "喊美美啊"; final String commentNickName ="歐巴沙拉呦"; String replyContentStr = "你寫的文章非常好,我很喜歡"; //用來標識在 Span 範圍內的文字前後輸入新的字元時是否把它們也應用這個效果 //Spanned.SPAN_EXCLUSIVE_EXCLUSIVE(前後都不包括) //Spanned.SPAN_INCLUSIVE_EXCLUSIVE(前面包括,後面不包括) //Spanned.SPAN_EXCLUSIVE_INCLUSIVE(前面不包括,後面包括) //Spanned.SPAN_INCLUSIVE_INCLUSIVE(前後都包括)//部分字型點選效果的監聽如下SpannableString ss = new SpannableString(replyNickName+"回覆"+commentNickName +":"+replyContentStr); //為回覆的人暱稱新增點選事件 ss.setSpan(new TextSpanClick(true), 0, replyNickName.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //為評論的人的新增點選事件 ss.setSpan(new TextSpanClick(false),replyNickName.length() + 2, replyNickName.length() + commentNickName.length() + 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(new ForegroundColorSpan(Color.RED),0, replyNickName.length(), Spannable.SPAN_EXCLUSIVE_INCLUSIVE); ss.setSpan(new ForegroundColorSpan(Color.RED),replyNickName.length()+2, replyNickName.length()+commentNickName.length()+2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //新增點選事件時,必須設定 tvContent.setText(ss); tvContent.setMovementMethod(LinkMovementMethod.getInstance());
private final class TextSpanClick extends ClickableSpan { private boolean status; public TextSpanClick(boolean status){ this.status = status; } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false);//取消下劃線 } @Override public void onClick(View v) { String msgStr =""; if(status){ msgStr = "我是回覆的人"; }else{ msgStr = "我是評論的人"; } Toast.makeText(FoodDetail.this, msgStr, Toast.LENGTH_SHORT).show(); } }