簡體   English   中英

為 TextView 的一部分設置可繪制背景

[英]Set drawable background for a portion of TextView

我為 Textview 中的android:background屬性創建了一個自定義可繪制對象。 但是我只想要 TextView 的某個部分而不是整個 TextView 的可繪制背景

到目前為止完成的工作:

在此處輸入圖像描述

目標:我想實現這樣的目標(即僅為文本的substring(1,2)設置背景):

在此處輸入圖像描述

這就是我實現當前結果的方式:

上划線.xml

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:bottom="-2dp"
        android:left="-2dp"
        android:right="-2dp"
        android:top="1dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="1dp"
                android:color="#030310" />
        </shape>
    </item>
</layer-list>

布局.xml

<TextView
    android:id="@+id/myTextView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/overline"
    android:textColor="#030310"
    android:text="Hello"/>

這是我到目前為止所嘗試的:

SpannableString ss = new SpannableString("Hello");

Drawable d = ContextCompat.getDrawable(((MainActivity) getActivity()).getApplicationContext(), R.drawable.overline);
d.setBounds(0, 0, 30, 30);

ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE);
ss.setSpan(span, 1, 2, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

myTextView.setText(ss);

我不太了解 ImageSpan ,因此這是我在嘗試上述代碼后得到的(我在從MainActivity加載的Fragment中編寫此代碼),

在此處輸入圖像描述

不幸的是,據我所知,沒有現成的 Android 解決方案可以滿足您的需求。 您在查看跨度方面處於良好的軌道上,但跨度提供了對底層TextPaint的訪問,並且只能真正完成TextPaint可以做的事情。 例外情況是ReplacementSpan ,它完全替換了跨區文本。 您的ImageSpanReplacementSpan ,因此矩形替換了所有文本並且不會像預期的那樣覆蓋。

有幾種方法可以按照您的要求進行操作,但我更喜歡的方法在Draw a rounded corner background on text中進行了概述。 這將是一個通用解決方案,但您需要對其進行調整以使圓形背景成為您的上划線。

如果這對您來說看起來有點過頭了,並且您的文本視圖足夠簡單,並且您知道要繪制的線條不會越過線條邊界,您也可以查看this

您還可以創建一個2dp寬的簡單視圖,並根據需要用背景覆蓋字母並以編程方式移動它。 自定義視圖也可以覆蓋所有文本,您可以在視圖的onDraw() function 中繪制線條。 TextView StaticLayout可以幫助確定應在自定義視圖中的何處繪制線條。

如果您搜索它們,我相信還有其他可用的在線解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM