Search in sources :

Example 16 with BackgroundColorSpan

use of android.text.style.BackgroundColorSpan in project CircleDemo by Naoki2015.

the class CircleMovementMethod method onTouchEvent.

public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
    int action = event.getAction();
    if (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);
        mClickLinks = buffer.getSpans(off, off, ClickableSpan.class);
        if (mClickLinks.length > 0) {
            // 点击的是Span区域,不要把点击事件传递
            setPassToTv(false);
            Selection.setSelection(buffer, buffer.getSpanStart(mClickLinks[0]), buffer.getSpanEnd(mClickLinks[0]));
            //设置点击区域的背景色
            mBgSpan = new BackgroundColorSpan(clickableSpanBgClor);
            buffer.setSpan(mBgSpan, buffer.getSpanStart(mClickLinks[0]), buffer.getSpanEnd(mClickLinks[0]), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        } else {
            setPassToTv(true);
            // textview选中效果
            widget.setBackgroundColor(textViewBgColor);
        }
    } else if (action == MotionEvent.ACTION_UP) {
        if (mClickLinks.length > 0) {
            mClickLinks[0].onClick(widget);
            if (mBgSpan != null) {
                //移除点击时设置的背景span
                buffer.removeSpan(mBgSpan);
            }
        } else {
        }
        Selection.removeSelection(buffer);
        widget.setBackgroundResource(R.color.transparent);
    } else if (action == MotionEvent.ACTION_MOVE) {
    //这种情况不用做处理
    } else {
        if (mBgSpan != null) {
            //移除点击时设置的背景span
            buffer.removeSpan(mBgSpan);
        }
        widget.setBackgroundResource(R.color.transparent);
    }
    return Touch.onTouchEvent(widget, buffer, event);
}
Also used : Layout(android.text.Layout) ClickableSpan(android.text.style.ClickableSpan) BackgroundColorSpan(android.text.style.BackgroundColorSpan)

Example 17 with BackgroundColorSpan

use of android.text.style.BackgroundColorSpan in project weiciyuan by qii.

the class ClickableTextViewMentionLinkOnTouchListener method onTouch.

@Override
public boolean onTouch(View v, MotionEvent event) {
    Layout layout = ((TextView) v).getLayout();
    if (layout == null) {
        return false;
    }
    int x = (int) event.getX();
    int y = (int) event.getY();
    int line = layout.getLineForVertical(y);
    int offset = layout.getOffsetForHorizontal(line, x);
    TextView tv = (TextView) v;
    SpannableString value = SpannableString.valueOf(tv.getText());
    switch(event.getActionMasked()) {
        case MotionEvent.ACTION_DOWN:
            MyURLSpan[] urlSpans = value.getSpans(0, value.length(), MyURLSpan.class);
            int findStart = 0;
            int findEnd = 0;
            for (MyURLSpan urlSpan : urlSpans) {
                int start = value.getSpanStart(urlSpan);
                int end = value.getSpanEnd(urlSpan);
                if (start <= offset && offset <= end) {
                    find = true;
                    findStart = start;
                    findEnd = end;
                    break;
                }
            }
            float lineWidth = layout.getLineWidth(line);
            find &= (lineWidth >= x);
            if (find) {
                LongClickableLinkMovementMethod.getInstance().onTouchEvent(tv, value, event);
                BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(ThemeUtility.getColor(R.attr.link_pressed_background_color));
                value.setSpan(backgroundColorSpan, findStart, findEnd, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
                //Android has a bug, sometime TextView wont change its value when you modify SpannableString,
                // so you must setText again, test on Android 4.3 Nexus4
                tv.setText(value);
            }
            return find;
        case MotionEvent.ACTION_MOVE:
            if (find) {
                LongClickableLinkMovementMethod.getInstance().onTouchEvent(tv, value, event);
            }
            break;
        case MotionEvent.ACTION_CANCEL:
        case MotionEvent.ACTION_UP:
            if (find) {
                LongClickableLinkMovementMethod.getInstance().onTouchEvent(tv, value, event);
                LongClickableLinkMovementMethod.getInstance().removeLongClickCallback();
                BackgroundColorSpan[] backgroundColorSpans = value.getSpans(0, value.length(), BackgroundColorSpan.class);
                for (BackgroundColorSpan backgroundColorSpan : backgroundColorSpans) {
                    value.removeSpan(backgroundColorSpan);
                }
                tv.setText(value);
                find = false;
            }
            break;
    }
    return false;
}
Also used : SpannableString(android.text.SpannableString) Layout(android.text.Layout) TextView(android.widget.TextView) BackgroundColorSpan(android.text.style.BackgroundColorSpan)

Example 18 with BackgroundColorSpan

use of android.text.style.BackgroundColorSpan in project platform_frameworks_base by android.

the class HtmlToSpannedConverter method withinParagraph.

private static void withinParagraph(StringBuilder out, Spanned text, int start, int end) {
    int next;
    for (int i = start; i < end; i = next) {
        next = text.nextSpanTransition(i, end, CharacterStyle.class);
        CharacterStyle[] style = text.getSpans(i, next, CharacterStyle.class);
        for (int j = 0; j < style.length; j++) {
            if (style[j] instanceof StyleSpan) {
                int s = ((StyleSpan) style[j]).getStyle();
                if ((s & Typeface.BOLD) != 0) {
                    out.append("<b>");
                }
                if ((s & Typeface.ITALIC) != 0) {
                    out.append("<i>");
                }
            }
            if (style[j] instanceof TypefaceSpan) {
                String s = ((TypefaceSpan) style[j]).getFamily();
                if ("monospace".equals(s)) {
                    out.append("<tt>");
                }
            }
            if (style[j] instanceof SuperscriptSpan) {
                out.append("<sup>");
            }
            if (style[j] instanceof SubscriptSpan) {
                out.append("<sub>");
            }
            if (style[j] instanceof UnderlineSpan) {
                out.append("<u>");
            }
            if (style[j] instanceof StrikethroughSpan) {
                out.append("<span style=\"text-decoration:line-through;\">");
            }
            if (style[j] instanceof URLSpan) {
                out.append("<a href=\"");
                out.append(((URLSpan) style[j]).getURL());
                out.append("\">");
            }
            if (style[j] instanceof ImageSpan) {
                out.append("<img src=\"");
                out.append(((ImageSpan) style[j]).getSource());
                out.append("\">");
                // Don't output the dummy character underlying the image.
                i = next;
            }
            if (style[j] instanceof AbsoluteSizeSpan) {
                AbsoluteSizeSpan s = ((AbsoluteSizeSpan) style[j]);
                float sizeDip = s.getSize();
                if (!s.getDip()) {
                    Application application = ActivityThread.currentApplication();
                    sizeDip /= application.getResources().getDisplayMetrics().density;
                }
                // px in CSS is the equivalance of dip in Android
                out.append(String.format("<span style=\"font-size:%.0fpx\";>", sizeDip));
            }
            if (style[j] instanceof RelativeSizeSpan) {
                float sizeEm = ((RelativeSizeSpan) style[j]).getSizeChange();
                out.append(String.format("<span style=\"font-size:%.2fem;\">", sizeEm));
            }
            if (style[j] instanceof ForegroundColorSpan) {
                int color = ((ForegroundColorSpan) style[j]).getForegroundColor();
                out.append(String.format("<span style=\"color:#%06X;\">", 0xFFFFFF & color));
            }
            if (style[j] instanceof BackgroundColorSpan) {
                int color = ((BackgroundColorSpan) style[j]).getBackgroundColor();
                out.append(String.format("<span style=\"background-color:#%06X;\">", 0xFFFFFF & color));
            }
        }
        withinStyle(out, text, i, next);
        for (int j = style.length - 1; j >= 0; j--) {
            if (style[j] instanceof BackgroundColorSpan) {
                out.append("</span>");
            }
            if (style[j] instanceof ForegroundColorSpan) {
                out.append("</span>");
            }
            if (style[j] instanceof RelativeSizeSpan) {
                out.append("</span>");
            }
            if (style[j] instanceof AbsoluteSizeSpan) {
                out.append("</span>");
            }
            if (style[j] instanceof URLSpan) {
                out.append("</a>");
            }
            if (style[j] instanceof StrikethroughSpan) {
                out.append("</span>");
            }
            if (style[j] instanceof UnderlineSpan) {
                out.append("</u>");
            }
            if (style[j] instanceof SubscriptSpan) {
                out.append("</sub>");
            }
            if (style[j] instanceof SuperscriptSpan) {
                out.append("</sup>");
            }
            if (style[j] instanceof TypefaceSpan) {
                String s = ((TypefaceSpan) style[j]).getFamily();
                if (s.equals("monospace")) {
                    out.append("</tt>");
                }
            }
            if (style[j] instanceof StyleSpan) {
                int s = ((StyleSpan) style[j]).getStyle();
                if ((s & Typeface.BOLD) != 0) {
                    out.append("</b>");
                }
                if ((s & Typeface.ITALIC) != 0) {
                    out.append("</i>");
                }
            }
        }
    }
}
Also used : SuperscriptSpan(android.text.style.SuperscriptSpan) ForegroundColorSpan(android.text.style.ForegroundColorSpan) RelativeSizeSpan(android.text.style.RelativeSizeSpan) URLSpan(android.text.style.URLSpan) CharacterStyle(android.text.style.CharacterStyle) UnderlineSpan(android.text.style.UnderlineSpan) AbsoluteSizeSpan(android.text.style.AbsoluteSizeSpan) StyleSpan(android.text.style.StyleSpan) SubscriptSpan(android.text.style.SubscriptSpan) Application(android.app.Application) BackgroundColorSpan(android.text.style.BackgroundColorSpan) TypefaceSpan(android.text.style.TypefaceSpan) StrikethroughSpan(android.text.style.StrikethroughSpan) ImageSpan(android.text.style.ImageSpan)

Example 19 with BackgroundColorSpan

use of android.text.style.BackgroundColorSpan in project platform_frameworks_base by android.

the class HtmlToSpannedConverter method endCssStyle.

private static void endCssStyle(Editable text) {
    Strikethrough s = getLast(text, Strikethrough.class);
    if (s != null) {
        setSpanFromMark(text, s, new StrikethroughSpan());
    }
    Background b = getLast(text, Background.class);
    if (b != null) {
        setSpanFromMark(text, b, new BackgroundColorSpan(b.mBackgroundColor));
    }
    Foreground f = getLast(text, Foreground.class);
    if (f != null) {
        setSpanFromMark(text, f, new ForegroundColorSpan(f.mForegroundColor));
    }
}
Also used : ForegroundColorSpan(android.text.style.ForegroundColorSpan) BackgroundColorSpan(android.text.style.BackgroundColorSpan) StrikethroughSpan(android.text.style.StrikethroughSpan)

Example 20 with BackgroundColorSpan

use of android.text.style.BackgroundColorSpan in project android_packages_inputmethods_LatinIME by CyanogenMod.

the class InputLogic method setComposingTextInternalWithBackgroundColor.

/**
     * Equivalent to {@link #setComposingTextInternal(CharSequence, int)} except that this method
     * allows to set {@link BackgroundColorSpan} to the composing text with the given color.
     *
     * <p>TODO: Currently the background color is exclusive with the black underline, which is
     * automatically added by the framework. We need to change the framework if we need to have both
     * of them at the same time.</p>
     * <p>TODO: Should we move this method to {@link RichInputConnection}?</p>
     *
     * @param newComposingText the composing text to be set
     * @param newCursorPosition the new cursor position
     * @param backgroundColor the background color to be set to the composing text. Set
     * {@link Color#TRANSPARENT} to disable the background color.
     * @param coloredTextLength the length of text, in Java chars, which should be rendered with
     * the given background color.
     */
private void setComposingTextInternalWithBackgroundColor(final CharSequence newComposingText, final int newCursorPosition, final int backgroundColor, final int coloredTextLength) {
    final CharSequence composingTextToBeSet;
    if (backgroundColor == Color.TRANSPARENT) {
        composingTextToBeSet = newComposingText;
    } else {
        final SpannableString spannable = new SpannableString(newComposingText);
        final BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(backgroundColor);
        final int spanLength = Math.min(coloredTextLength, spannable.length());
        spannable.setSpan(backgroundColorSpan, 0, spanLength, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_COMPOSING);
        composingTextToBeSet = spannable;
    }
    mConnection.setComposingText(composingTextToBeSet, newCursorPosition);
}
Also used : SpannableString(android.text.SpannableString) BackgroundColorSpan(android.text.style.BackgroundColorSpan)

Aggregations

BackgroundColorSpan (android.text.style.BackgroundColorSpan)31 ForegroundColorSpan (android.text.style.ForegroundColorSpan)19 ImageSpan (android.text.style.ImageSpan)14 SpannableStringBuilder (android.text.SpannableStringBuilder)11 StrikethroughSpan (android.text.style.StrikethroughSpan)11 UnderlineSpan (android.text.style.UnderlineSpan)11 TextView (android.widget.TextView)11 SpannableString (android.text.SpannableString)7 AbsoluteSizeSpan (android.text.style.AbsoluteSizeSpan)6 RelativeSizeSpan (android.text.style.RelativeSizeSpan)6 StyleSpan (android.text.style.StyleSpan)6 View (android.view.View)6 Button (android.widget.Button)6 LinearLayout (android.widget.LinearLayout)6 Application (android.app.Application)5 CharacterStyle (android.text.style.CharacterStyle)5 SubscriptSpan (android.text.style.SubscriptSpan)5 SuggestionSpan (android.text.style.SuggestionSpan)5 SuperscriptSpan (android.text.style.SuperscriptSpan)5 TypefaceSpan (android.text.style.TypefaceSpan)5