TextView显示更多和收起
来源:互联网 发布:澳洲机场退税软件 编辑:程序博客网 时间:2024/06/16 07:35
<pre name="code" class="java">这玩意整了好久的
acticity:package com.example.scrolltextview2;import android.app.Activity;import android.graphics.Color;import android.graphics.drawable.Drawable;import android.os.Bundle;import android.text.Spannable;import android.text.SpannableString;import android.text.Spanned;import android.text.TextPaint;import android.text.TextUtils.TruncateAt;import android.text.method.LinkMovementMethod;import android.text.method.MovementMethod;import android.text.style.ClickableSpan;import android.text.style.ImageSpan;import android.view.MotionEvent;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;public class TextViewActivity extends Activity {private TextView tv;private String status = "up";private String str = "啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊";private String str_show = "";private int maxlength = 20;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);tv = (TextView) findViewById(R.id.textView1);if (str.length() < maxlength) {tv.setText(str);} else {changStatus();}}private void changStatus() {tv.setText("");Drawable drawable = null;if (status.equals("down")) {drawable = getResources().getDrawable(R.drawable.icon_arrow_up);status = "up";str_show = str;tv.setMaxLines(10000);} else if (status.equals("up")) {drawable = getResources().getDrawable(R.drawable.icon_arrow_down);status = "down";tv.setMaxLines(2);str_show = str.substring(0, maxlength);str_show += "...";}String spanString = str_show;spanString = spanString.substring(0, spanString.length());drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),drawable.getIntrinsicHeight());SpannableString spannable = new SpannableString(spanString.toString()+ "s");ImageSpan span = new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE);spannable.setSpan(span, spanString.toString().length(), spanString.toString().length() + "s".length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);ClickableSpan rightClickableSpan = new ClickableSpan() {@Overridepublic void onClick(View view) {changStatus();}};spannable.setSpan(rightClickableSpan, spanString.toString().length(),spanString.toString().length() + "s".length(),Spannable.SPAN_INCLUSIVE_EXCLUSIVE);tv.setText(spannable);tv.setMovementMethod(new MyTouch());}}2、定义MyTouch类继承LinkMovementMethodpackage com.example.scrolltextview2;import android.graphics.Color;import android.text.Layout;import android.text.Selection;import android.text.Spannable;import android.text.Spanned;import android.text.method.LinkMovementMethod;import android.text.method.Touch;import android.text.style.BackgroundColorSpan;import android.text.style.ClickableSpan;import android.view.MotionEvent;import android.widget.TextView;public class MyTouch extends LinkMovementMethod{public boolean onTouchEvent(TextView widget, Spannable buffer,MotionEvent event) {// TODO Auto-generated method stub 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); buffer.setSpan(new BackgroundColorSpan(Color.TRANSPARENT), buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } else if (action == MotionEvent.ACTION_DOWN) { buffer.setSpan(new BackgroundColorSpan(Color.GRAY), buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0]), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); Selection.setSelection(buffer, buffer.getSpanStart(link[0]), buffer.getSpanEnd(link[0])); } return true; } else { Selection.removeSelection(buffer); } } return Touch.onTouchEvent(widget, buffer, event);}}3.布局:<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" tools:context=".TextViewActivity" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:clickable="true" /></LinearLayout>
<span style="font-size:18px;color:#ff0000;"><strong><u>各位有更好的可以推荐下啊</u></strong></span>
0 0
- TextView显示更多和收起
- 显示更多和收起
- Android中SpannableString学习以及实现自定义TextView的显示更多(展开)和收起功能
- TextView展开和收起
- 动态设置TextView的高度,就是点击收起和展示更多的效果
- textview显示更多的
- 仿微信评论显示更多与收起
- TextView实现扩展和收起
- 带“更多”“收起”的多行折叠textview
- TextView 显示收起 展开的bug
- 查看更多和收起的js
- TextView显示更多的实现
- Textview自带展开和收起功能
- 仿QQ空间说说TextView内容显示、收起
- 关于实行textview 显示多行 更多
- 362_显示键盘和收起键盘
- android 更多 收起 简单实现
- Textview内容过多,尾部显示省略号或【更多】
- serlvet
- 关于Android中使用Handler造成内存泄露的分析和解决
- Android 中this、 getApplicationContext()、getApplication()之间的区别
- Python文件关闭机制详解
- IOS合并lib(.a)库的终极可用方法(可用于解决duplicate symbol静态库冲突)
- TextView显示更多和收起
- 设计模式---模板模式 实例
- 使用ReactiveCocoa初探MVVM
- Android双击返回键Activity的方法
- poj 1064
- 类Bitmap和Drawable
- model redirect
- ACE_Message_Queue编码注意问题点
- 剪贴板操作