1. 程式人生 > >View — TextView多行文字後新增可點選的固定文字

View — TextView多行文字後新增可點選的固定文字

一、概述

需求如下:在一個多行文字最後新增一個可點選的文字。

二、程式碼

佈局檔案

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#31999999">

    <!-- 左右邊距是20
dp --> <TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="30dp" android:background="#ffffff"
android:paddingBottom="10dp" android:paddingTop="10dp" android:textSize="15sp" /> </RelativeLayout>

程式碼

public class MainActivity extends FragmentActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        String content = "我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字我是文字"
; String suffix = "檢視詳情"; TextView titleTv = ((TextView) findViewById(R.id.title)); renderDesc(titleTv, content, suffix); } private int dp2px(float dpVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal, getResources().getDisplayMetrics()); } private int sp2px(float dpVal) { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, dpVal, getResources().getDisplayMetrics()); } private int getDeviceWidth() { DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); return dm.widthPixels; } // 渲染文字 private void renderDesc(final TextView textView, final String content, @Nullable String suffix) { if (TextUtils.isEmpty(content)) { return; } int deviceWidth = getDeviceWidth(); int leftPadding = dp2px(20);//控制元件左右邊距 int availLength = (int) (2.5 * (deviceWidth - leftPadding * 2));//2.5表示擷取2.5行的文字長度 final TextPaint textPaint = textView.getPaint(); // 核心Api String ellipsizeStr = (String) TextUtils.ellipsize(content, textPaint, availLength, TextUtils.TruncateAt.END); boolean isSuffixEmpty = TextUtils.isEmpty(suffix); String totalContent = isSuffixEmpty ? ellipsizeStr : (ellipsizeStr + suffix); SpannableString spanString = new SpannableString(totalContent); if (!isSuffixEmpty) { spanString.setSpan(new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(MainActivity.this, "點選檢視詳情", Toast.LENGTH_SHORT).show(); } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(Color.parseColor("#0078FF"));//可點選文字的顏色 ds.setAntiAlias(true); ds.setUnderlineText(false);//移除下劃線 } }, ellipsizeStr.length(), totalContent.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); textView.setMovementMethod(LinkMovementMethod.getInstance());//增加該方法,否則點選不生效 } textView.setText(spanString); } }