qq空间秒赞秒评论软件评论两个小人

QQ空间里一条说说才两个评论,为什么其中一条还得要展开?是不是有什么权限?怎么样才能解除呢?_百度知道6110人阅读
Android相关(11)
首先,我们要实现的效果是这样的:
1.& 评论人和被评论人颜色与评论内容颜色不同。
通过重写ClickabSpan的updateDrawState方法来实现。
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(false);
ds.setColor(Color.BLUE);
2.& 点击评论人名字C(onClick,onLongClick),触发相应的操作,点击有selector效果。
3.& 点击评论内容D(onClick,onLongClick),触发相应的操作,点击有selector效果。
4.& 点击layout B(onClick,onLongClick),触发相应的操作,点击有selector效果。
5.& 点击layout A(onClick,onLongClick),触发相应的操作,点击有selector效果。
要求A,B,C的点击效果不冲突(B和D的点击效果一致)。可以操作QQ空间体验一下。
主要是实现Layout B的效果。
B是一个包含TextView的RelativeLayout。而这个TextView的text使用了ClickableSpan,当点击ClickableSpan指向的内容时,会执行ClickableSpan的onClick方法。而当点击TextView中非ClickableSpan指向的内容时,却不会执行RelativeLayout的点击行为。
我们首先来解决这个问题。
我们要达到的目标是:当点击TextView中ClickableSpan指向的内容时,响应的是ClickableSpan的onClick方法。而当点击TextView中非ClickableSpan指向的内容时,响应的是RelativeLayout的点击事件。
怎么才能实现呢?
最直观的想法就是重写TextView的onTouchEvent方法,当触摸到ClickableSpan指向的内容时,onTouchEvent返回true,当触摸到非ClickableSpan指向的内容时,onTouchEvent需要返回false,让其父view,也就是RelativeLayout去处理。(涉及到事件传递方面的知识)。
最关键的问题来了,怎么判断用户点触的是ClickableSapn指向的内容?
我们想,当我们点击到ClickableSpan指向的内容时,ClickableSpan可以响应,它是怎么判断的?
我们在使用ClickableSpan的时候必须要设置LinkMoventMethod,否则点击ClickableSpan是没有效果的。
public void setHtmlText(String str) {
Spannable span = setClickableSpan(str);
if (null != span) {
setMovementMethod(LinkMovementMethod.getInstance());
setText(span);
setText(str);
(里建议在有ClickableSpan的时候才设置LinkMovementMethod。)
我们再看下TextView的onTouchEvent方法,其中有这样一段代码:
if (mMovement != null) {
handled |= mMovement.onTouchEvent(this, (Spannable) mText, event);
mMovement就是设置的LinkMovementMethod,我们再去看下LinkMovementMethod的源代码:
public boolean onTouchEvent(TextView widget, Spannable buffer,
MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
link[0].onClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer,
buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
Selection.removeSelection(buffer);
return super.onTouchEvent(widget, buffer, event);
就是在这个方法中触发的ClickableSpan的onClick事件。我们可以借鉴这个方法的代码来判断是否点击到ClickableSpan指向的区域。
基于此,我们重写TextView,命名为MyTextView:
主要方法有两个:
public boolean onTouchEvent(MotionEvent event) {
boolean result = super.onTouchEvent(event);
int action = event.getAction();
int x = (int) event.getX();
int y = (int) event.getY();
x -= getTotalPaddingLeft();
y -= getTotalPaddingTop();
x += getScrollX();
y += getScrollY();
Layout layout = getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
CharSequence text = getText();
if (TextUtils.isEmpty(text) || !(text instanceof Spannable)) {
Spannable buffer = (Spannable)
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length & 0) {
public boolean hasFocusable() {
ok,测试,搞定。
RelativeLayout可以通过设置background来设置selector,那点击ClickableSpan的时候,selector效果是怎么实现?
ClickableSpan没有API可以调用去设置selector,我们可以通过在onTouchEvent方法中通过监听ACTION_DOWN和ACTION_UP来设置不同的background来达到这种效果。
我们通过BackgroundSpan来设置背景颜色。
那贴上我们加上selector效果后MyTextView的onTouchEvent方法代码:
public boolean onTouchEvent(MotionEvent event) {
boolean result = super.onTouchEvent(event);
int action = event.getAction();
int x = (int) event.getX();
int y = (int) event.getY();
x -= getTotalPaddingLeft();
y -= getTotalPaddingTop();
x += getScrollX();
y += getScrollY();
Layout layout = getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
CharSequence text = getText();
if (TextUtils.isEmpty(text) || !(text instanceof Spannable)) {
Spannable buffer = (Spannable)
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_DOWN) {
mStart = buffer.getSpanStart(link[0]);
mEnd = buffer.getSpanEnd(link[0]);
if (mStart &= 0 && mEnd &= mStart) {
buffer.setSpan(new BackgroundColorSpan(Color.GRAY), mStart, mEnd,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
} else if (action == MotionEvent.ACTION_UP || action == MotionEvent.ACTION_CANCEL) {
if (mStart &= 0 && mEnd &= mStart) {
buffer.setSpan(new BackgroundColorSpan(Color.TRANSPARENT), mStart, mEnd,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
Selection.removeSelection(buffer);
mStart = -1;
mEnd = -1;
if (mStart &= 0 && mEnd &= mStart) {
buffer.setSpan(new BackgroundColorSpan(Color.TRANSPARENT), mStart, mEnd,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
Selection.removeSelection(buffer);
mStart = -1;
mEnd = -1;
ok,测试,搞定。
注意,当使用ListView的onItemClick和onItemLongClick来处理点击事件时,会造成ListView的子View与Item的点击事件冲突。可以使用在getView的时候,通过设置View的onClick事件和onLongClick事件来达到效果。
Demo地址:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:36554次
排名:千里之外
原创:18篇
评论:22条
(2)(1)(1)(1)(1)(1)(2)(1)(1)(5)(3)(2)新浪广告共享计划>
广告共享计划
的这篇博文被推荐到此博主被推荐的博文:
犯小人的因素你占了几条?
犯小人的因素你占了几条
文/国际周易
&大家在上中学的时候,都学过诸葛孔明的《出师表》,在文中,他规劝后主刘禅“亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。”小人的威力甚至可以左右朝代的兴衰,而对于个人来说,在生活、工作中遇到小人,同样会带来诸多麻烦、困扰。小人多会在你背后使个绊儿,而表面功夫却做得格外好。多有李林甫口蜜腹剑的本领。如果你后知后觉,多半是被人当了垫脚石借着上位,还在认为人家对你蛮好的,这可以算是高级别的小人。而更多的小人,是在工作中给你穿小鞋、挑拨离间、落井下石,打击、排挤、中伤都是他们惯用的手段。招小人是由不同原因导致的,有些是先天形成的,还有很多是因为无知犯了风水上的禁忌而造成的。
&从命理八字来看,一般而言,身强之人,四柱中有“劫财”者,称之为命犯小人,劫财,顾名思义,即钱财被劫之意;而七杀则是专门克制己身的。凡身弱之人,四柱中有“七杀”的,则主命犯小人。从众多例证中,我们可以得出这样的结论,如果你的八字身弱,即容易招惹是非、小人,使灾祸临身。
&上面说的是命理犯小人,还有流年犯小人的,如2013年犯小人的生肖前三名:
&第一名:虎、第二名:猪、第三名:猴,这三个生肖的朋友,在今年难逃小人是非,建议最好不与他人合作经营任何项目,以免被陷害、算计,损耗钱财、身损心伤,累及运势(如果是一些必须进行的合作,最好慎选合作者,具体可参看今年的生肖运程一书)。
&而在风水方面,无论是居家风水,还是职场风水,都要注意啦!
&比如,很多年轻人都喜欢在办公桌上放个玩偶,有时哪怕是吃个快餐,偶然得的可爱卡通玩具,随手就放在办公桌上了,这样的习惯要尽量避免,从风水学上来说,这可是容易招来小人,让小人注意到你的“祸根”呀!
&和上面说的问题相似,女孩子爱花,爱人之间多以玫瑰传情,将一束玫瑰放在桌上,看起来是赏心悦目的,却犯了风水大忌。有人甚至错误地认为,仙人掌等带刺植物可以防小人,其实恰恰相反,无论是玫瑰还是仙人掌,凡带刺植物都是招小人的,检查一下你的办公桌,如果有,赶紧去除。
&在职场风水中,东方青龙位代表贵人,而西方白虎位代表小人。自古白虎即被认为是口舌、是非之神。而青龙位贵高,白虎位则与之相反,宜低不宜高。要减弱白虎位的气场,同时又要加强青龙位的气场,并结合自身八字命理调整化解。如果不能按风水规律布置办公位,反而之与相左,则会导致犯小人阻碍、工作不稳、同事不和等诸多不利。而且白虎位五行属金,故此位不且有尖角、五金、电器、兵刃刀具等物出现。
说完了职场风水,再来看看家居风水中有关防小人的风水讲究。比如这睡床的摆放吧,以床头为准,睡床的右侧忌靠墙。这也和上面所说的青龙、白虎位有关,知道这两个方位的风水讲究,就该知晓睡床右侧摆放物品的高度同样不能高过睡床左侧物品的高度,右侧空间不能少于左侧空间。
从风水角度而言,无论是家居风水还是职场、办公风水,犯冲的格局都是极易招惹小人的。如果不想被小人盯上,成为被陷害、整治的对象,还要看看自己所坐的位置是否犯冲(犯冲和命理所讲的相克意思相类,从风水角度来讲,冲就是正对的意思,而犯冲是极不利的)。以往多次我们都强调过,家居床位不能正对门,沙发摆放的位置亦是这样。但如果是办公桌正被门冲,一般的职员是很难随意调整自己座位的,这就需要用相关的风水物品进行化解了。
&董易林温馨提示:为防患于未然,大家可以随身佩戴相关的防小人、避小人开运物。保持平和的心态,在遭遇小人时,亦能坦然、从容面对,做个心胸开阔之人,正是“君子坦荡荡,小人长戚戚。”
&-------------董易林预约QQ在线咨询:QQ---------------&
-------------董易林命理QQ在线咨询:QQ---------------&&
-------------董易林风水QQ在线咨询:QQ---------------&&
-------------咨询电话:400-002-1987---------------&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 qq空间别人看不到评论 的文章

 

随机推荐