点击textView中的一小段文字,弹一个dialog框
失败解决方案
刚开始是用了两个textView水平布局,可想而知,当第一个textView快占满一行,还未换行时,第二个textView很可能出现换行排版问题
用spannableString的问题
小段文字有下划线
点击textView中的小段文字时,系统会当做url处理,给点击部分的text加一个蓝色的背景
解决方案
public class TouchableSpan extends ClickableSpan { private boolean mIsPressed; private int mPressedBackgroundColor; private int mNormalTextColor; private int mPressedTextColor; public TouchableSpan(int normalTextColor, int pressedTextColor, int pressedBackgroundColor) { mNormalTextColor = normalTextColor; mPressedTextColor = pressedTextColor; mPressedBackgroundColor = pressedBackgroundColor; } public void setPressed(boolean isSelected) { mIsPressed = isSelected; } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(mIsPressed ? mPressedTextColor : mNormalTextColor); ds.bgColor = mIsPressed ? mPressedBackgroundColor : 0x00eeeeee; ds.setUnderlineText(false); } @Override public void onClick(View widget) { //todo } }
public class TouchableSpan extends ClickableSpan { private boolean mIsPressed; private int mPressedBackgroundColor; private int mNormalTextColor; private int mPressedTextColor; public TouchableSpan(int normalTextColor, int pressedTextColor, int pressedBackgroundColor) { mNormalTextColor = normalTextColor; mPressedTextColor = pressedTextColor; mPressedBackgroundColor = pressedBackgroundColor; } public void setPressed(boolean isSelected) { mIsPressed = isSelected; } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(mIsPressed ? mPressedTextColor : mNormalTextColor); ds.bgColor = mIsPressed ? mPressedBackgroundColor : 0x00eeeeee; ds.setUnderlineText(false); } @Override public void onClick(View widget) { //todo } }
用法:
TextView tView = (TextView) findViewById(R.id.text);
String sss = "BubyBBBAAAAAAAAAAAAAAAAAA";
SpannableString spanName = new SpannableString(sss);
TouchableSpan touchableSpan1 = new TouchableSpan(Color.argb(255, 82, 107, 146), Color.argb(255, 82, 107, 146), Color.argb(90, 0, 0, 0));
touchableSpan1.setPressString(sss.substring(0, 7));
touchableSpan1.setPressed(true);
spanName.setSpan(touchableSpan1, 0, 7, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
tView.setText(spanName, BufferType.SPANNABLE);
tView.setMovementMethod(new LinkTouchMovementMethod());
转载来自:http://www.it165.net/pro/html/201406/15582.html