1. 程式人生 > >android TextView部分文字可點選 不同大小文字新增背景且居中顯示

android TextView部分文字可點選 不同大小文字新增背景且居中顯示

這裡寫圖片描述

txt.setText("這是一條測試文字");
        SpannableString clickString = new SpannableString("可點選文字");
        clickString.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                startActivity(new Intent(MainActivity.this, FirstActivity.class));
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.RED);//設定顏色
            }
        }, 0, clickString.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        txt.append(clickString);
        txt.append(new SpannableString("這也是一條測試文字"));
        SpannableString clickString2 = new SpannableString("我是可點選的");
        clickString2.setSpan(new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                startActivity(new Intent(MainActivity.this, SecondActivity.class));
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.BLUE); //設定顏色
            }
        }, 0, clickString2.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        txt.append(clickString2);
        txt.setMovementMethod(LinkMovementMethod.getInstance());//開始響應點選事件

不同大小文字新增背景且居中顯示

要實現的效果如下
在這裡插入圖片描述
想要實現上圖的效果首先想到的是先設定RelativeSizeSpan改變文字大小、再設定BackgroundColorSpan新增背景、再設定ForegroundColorSpan改變活動標籤文字大小

SpannableString spannableString = new SpannableString(" 活動標籤 " + "我是商品標題我是商品標題我是商品標題我是商品標題我是商品標題");
spannableString.setSpan(new RelativeSizeSpan(0.7f),0,6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new BackgroundColorSpan(Color.RED),0,6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.WHITE),0,6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvSpan.setText(spannableString);

看下結果吧
在這裡插入圖片描述
發現活動標籤的文字沒有豎直居中,這裡就需要自定義了

/**
 * Created by cys on 2018/11/2 0002.
 * 根據大小繪製對應大小背景span
 */
public class BackgroundColorResizeSpan extends ReplacementSpan {
    private int mBackgroundColor;//字型背景色
    private float fontSizePx;//字型大小單位px
    private int mTextColor;//字型顏色
    private int mWidth;

    public BackgroundColorResizeSpan(int mBackgroundColor, int mTextColor, float fontSizePx) {
        this.mBackgroundColor = mBackgroundColor;
        this.mTextColor = mTextColor;
        this.fontSizePx = fontSizePx;
    }

    @Override
    public int getSize(@NonNull Paint paint, CharSequence text, int start, int end, @Nullable Paint.FontMetricsInt fm) {
        paint.setTextSize(fontSizePx);
        //獲取文字寬度
        mWidth = (int) paint.measureText(text.subSequence(start, end).toString());
        return mWidth;
    }

    @Override
    public void draw(@NonNull Canvas canvas, CharSequence text, int start, int end, float x, int top, int y, int bottom, @NonNull Paint paint) {
        paint.setTextSize(fontSizePx);
        Paint.FontMetrics fontMetrics = paint.getFontMetrics();
        paint.setColor(mBackgroundColor);
        //繪製背景
        canvas.drawRect(x, (bottom + top) / 2 - (fontMetrics.bottom - fontMetrics.top) / 2, mWidth, (bottom + top) / 2 + (fontMetrics.bottom - fontMetrics.top) / 2, paint);
        paint.setColor(mTextColor);
        //繪製文字
        canvas.drawText(text.subSequence(start, end).toString(), x, (top + bottom)/2 - (fontMetrics.bottom - fontMetrics.top) / 2 - fontMetrics.top, paint);

    }
}

使用起來也是比較方便的

SpannableString spannableString = new SpannableString(" 活動標籤 " + "我是商品標題我是商品標題我是商品標題我是商品標題我是商品標題");
spannableString.setSpan(new BackgroundColorResizeSpan(Color.RED, Color.WHITE, spToPx(11)), 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
tvSpan.setText(spannableString);

相關推薦

android TextView部分文字 不同大小文字新增背景居中顯示

txt.setText("這是一條測試文字"); SpannableString clickString = new SpannableString("可點選文字");

TextView設定部分文字及樣式

String str = "這裡可以點";tv.setText(Html.fromHtml("<font color=\"#ffoooo\">紅色</font>text文字")); //設定部分字型樣式,但是不可點選SpannableString spString = new Span

View — TextView多行文字新增的固定文字

一、概述 需求如下:在一個多行文字最後新增一個可點選的文字。 二、程式碼 佈局檔案 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="ht

Android 懸浮窗:顯示/隱藏多功能列表

前言 最近在一個專案中,需要製作錄屏的功能,原先是在應用中有錄屏/控制的按鈕,思考之下覺得這種效果並不好,因此就想製作一個可以懸浮的懸浮窗,這樣不論手機在什麼介面中都可以對錄屏功能進行控制。 這裡就來構建一個桌面的懸浮窗,使用了DataBinding的MVV

UILabel文字

 TTTAttributedLabel 庫地址 https://github.com/TTTAttributedLabel/TTTAttributedLabel #import "ViewCont

Android TextView部分字型變色或字型變大小

A.  SpannableStringBuilder style=new SpannableStringBuilder(str); //SpannableStringBuilder實現CharSequence介面 style.setSpan(new Foreground

AndroidTextView部分文字加下劃線 並加入超連結(

Android 本身自帶的TextView 並沒有直接的方法可以給文字加下劃線和可點選的超連結,使用以下方法即可實現: /** * * @param content 文字內容 * @param textView 載入文字的textview *

android 支援部分關鍵字帶下劃線TextView

Support some of the key words can be clicked with the underline TextView <declare-styleable name="AutoLinkStyleTextView"> <attr name=

Android TextView新增連結並在連結部分字型變色

這麼一個效果:一行文本當中 前面顯示黑色顏色的“超文字:”,後面顯示紅色顏色的“http://www.baidu.com” 並且要求紅色字型的部分可以點選,有響應的點選事件進行處理,你該如何實現? 最簡單的實現方法,兩個TextView ,第一個顯示黑色字型的“超

使用SpannableString,ClickableSpan,文字部分

最近4個月都在忙一個專案,最近專案接近尾聲,所有打算趁這個機會稍微做一點總結。 本次總結的功能是實現一段文字,部分文字顏色不同,部分文字有下劃線並且可以點選,主要的思路就是使用SpannableString,自定義一個ClickableSpan。以下就是實現該功能

TextView中的部分文字響應事件

TextView是android常用的控制元件,經常要顯示不同文字的大小,顏色,......今天要實現這樣這樣一個需求,TextView某段內容顯示的文字顏色不一樣,並且點選區域只能是改變了顏色的字. 1.給TextView設定設定文字背景為透明色,不然會有點選選中效果.

Android實現載入富文字以及SpannableString、SpannableStringBuilder實現部分文字可以,更換顏色

  最近專案中要實現部分文字變顏色,並且是可點選的。網上找了一下,實現的方式是android端載入富文字,如果你會js的話,那就方便了,表示本人不怎麼會,而且專案框架和介面已經確定了,不可能再改,所以只能試一試其他的方式。 SpannableString、Sp

Android底部導航欄切換介面,選項時文字和圖示改變顏色

** 類似底部導航欄的選單,點選圖示,文字和圖示都變顏色,Fragment切換介面詳解 ** 先看效果圖 以下是全部完整程式碼,如果有問題歡迎留言 圖示和文字佈局color_change.xml <?xml version="1.0" encodi

Android-文字摺疊展開

資訊欄,景點介紹,購物資訊,進場會使用到文字摺疊的方法 實現非常簡單,這裡就不哆嗦了 效果如下: Demo:https://github.com/LonglyWolf/NavigationSystemHLJU 這裡用到了三方類庫,在app/gradle新增依賴如下: /

關於Android studio中使用匿名內部類實現按鍵浮現文字

在app的開發中,有時候我們需要點選一個按鍵,而後浮現一行文字,以下提供一種使用匿名內部類的較簡單的方案,並記錄了一些暫時無法解決的問題。 Button button=(Button)findViewById(R.id.button); button.setOnClick

Android 簡單實現全屏拖動,的View

首先,我們都知道,拖動一個view,需要給它設定touchListener,或者重寫他的touchEvent。我們以ImageView為例,自定義一個DragView,繼承ImageView。 單純的只是想讓view拖動,我們只需要在ACTION_DOWN

android EditText 的不可編輯

在開發過程中可能很多地方都需要輸入 今天為大家整理一下EditText 的樣式 很簡單  Editext  <EditText android:focusable="false" androi

監聽TextView中連結文字事件

最近有一個需求,在一個Dialog中顯示一個帶有連結的文字,點選這個連結文字跳轉到指定的網站中,同時這個Dialog消失。具體的實現如下: 用到的Dialog的contentView的資原始檔dlg_with_link_text.xml: <?xml version="1.0"