[英]Android - Set TextView background programatically to drawable before API 24
[英]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 ,它完全替換了跨區文本。 您的ImageSpan是ReplacementSpan ,因此矩形替換了所有文本並且不會像預期的那樣覆蓋。
有幾種方法可以按照您的要求進行操作,但我更喜歡的方法在Draw a rounded corner background on text中進行了概述。 這將是一個通用解決方案,但您需要對其進行調整以使圓形背景成為您的上划線。
如果這對您來說看起來有點過頭了,並且您的文本視圖足夠簡單,並且您知道要繪制的線條不會越過線條邊界,您也可以查看this 。
您還可以創建一個2dp
寬的簡單視圖,並根據需要用背景覆蓋字母並以編程方式移動它。 自定義視圖也可以覆蓋所有文本,您可以在視圖的onDraw()
function 中繪制線條。 TextView StaticLayout可以幫助確定應在自定義視圖中的何處繪制線條。
如果您搜索它們,我相信還有其他可用的在線解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.