- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想将特定子字符串的字体设为粗体。
这是我的代码:
String fullName = "some name";
String searchFreeText = "some";
SpannableString wordToSpan = new SpannableString(fullName);
Typeface helvticaBoldTypeface = Typeface.createFromAsset(context.getAssets(), FONT_HELVETICA_BOLD);
int startPosition = fullName.toLowerCase().indexOf(searchFreeText.toLowerCase());
StyleSpan bold = new StyleSpan(helvticaBoldTypeface.getStyle());
wordToSpan.setSpan(bold, startPosition, startPosition + searchFreeText.length(), 0);
firstLineTextView.setText(wordToSpan, BufferType.SPANNABLE);
文本仍然不是粗体。如果我将代码更改为:
firstLineTextView.setTypeface(helvticaBoldTypeface, Typeface.BOLD);
并删除
StyleSpan bold = new StyleSpan(helvticaBoldTypeface.getStyle());
wordToSpan.setSpan(bold, startPosition, startPosition + searchFreeText.length(), 0);
然后所有文本都是粗体,这没问题,但不是我想要的。我只需要将特定文本设为粗体。我希望看到这个:一些名字。
问题是什么?谢谢
最佳答案
I noticed one thing: You are using FONT_HELVETICA_BOLD (Which is already bold so nothing special gonna happen to your text cuz it is already bold just change it to some regular font)
For making specific text bold and colored you can try the following code
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(textToBeSpannedWithBold);
StyleSpan styleSpan = new StyleSpan(android.graphics.Typeface.BOLD);
spannableStringBuilder.setSpan(styleSpan,
positionOfSearchedText,
positionOfSearchedText + searchTextToBeBold.length(),
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
//Use this if you wanna make specific text bold
SpannableString uncolouredSpan = new SpannableString(spannableStringBuilder);
textViewToBeBoldSpanned.setText(uncolouredSpan);
//Use this if you wanna make specific text bold plus coloured
SpannableString coloredSpan = giveMeColoredSpan(
new SpannableString(spannableStringBuilder),
ContextCompat.getColor(getContext(), R.color.your_specific_colour));
textViewToBeBoldSpannedAndColoured.setText(coloredSpan);
public static SpannableString giveMeColoredSpan(SpannableString spannableString, int color) {
spannableString.setSpan(
new ForegroundColorSpan(color), 0, spannableString.length(), 0);
return spannableString;
}
If Still somehow you are stuck with your problem for that i have created a repo on Github https://github.com/harsh159357/customtextview
来 self 的 Repo 的 Activity 代码
CustomTextViewActivity.java
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.view.View;
import android.widget.Button;
public class CustomTextViewActivity extends AppCompatActivity implements View.OnClickListener {
public static final String MAKE_THIS_SPECIFIC_PART_COLORED = "MakeThisSpecificPartColored";
public static final String MAKE_THIS_SPECIFIC_PART_BOLD = "MakeThisSpecificPartBold";
public static final String MAKE_THIS_SPECIFIC_PART_BOLD_AND_COLORED = "MakeThisSpecificPartBoldAndColored";
CustomTextView customTextView1,
customTextView2,
customTextView3;
Button changeToRoboto,
changeToCalculus,
makeSpecificTextColored,
makeSpecificTextBold,
makeSpecificTextBoldAndColored;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_text_view);
customTextView1 = (CustomTextView) findViewById(R.id.customTextView1);
customTextView2 = (CustomTextView) findViewById(R.id.customTextView2);
customTextView3 = (CustomTextView) findViewById(R.id.customTextView3);
changeToRoboto = (Button) findViewById(R.id.change_to_roboto);
changeToCalculus = (Button) findViewById(R.id.change_to_calculus);
makeSpecificTextBold = (Button) findViewById(R.id.make_specific_text_bold);
makeSpecificTextColored = (Button) findViewById(R.id.make_text_colored);
makeSpecificTextBoldAndColored = (Button) findViewById(R.id.make_text_bold_and_colored);
changeToRoboto.setOnClickListener(this);
changeToCalculus.setOnClickListener(this);
makeSpecificTextColored.setOnClickListener(this);
makeSpecificTextBold.setOnClickListener(this);
makeSpecificTextBoldAndColored.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.change_to_roboto:
customTextView1.setFont(getString(R.string.font_roboto_regular));
customTextView2.setFont(getString(R.string.font_roboto_regular));
customTextView3.setFont(getString(R.string.font_roboto_regular));
break;
case R.id.change_to_calculus:
customTextView1.setFont(getString(R.string.font_calculus_sans));
customTextView2.setFont(getString(R.string.font_calculus_sans));
customTextView3.setFont(getString(R.string.font_calculus_sans));
break;
case R.id.make_text_colored:
makeTextColoured();
break;
case R.id.make_specific_text_bold:
makeSpecificTextBold();
break;
case R.id.make_text_bold_and_colored:
makeTextBoldAndColored();
break;
}
}
public static SpannableString giveMeColoredSpan(SpannableString spannableString, int color) {
spannableString.setSpan(
new ForegroundColorSpan(color), 0, spannableString.length(), 0);
return spannableString;
}
private void makeTextColoured() {
String textToBeSpanned = customTextView1.getText().toString();
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(textToBeSpanned);
int positionOfSearchedText = textToBeSpanned.indexOf(MAKE_THIS_SPECIFIC_PART_COLORED);
SpannableString coloredSpan = giveMeColoredSpan(
new SpannableString(textToBeSpanned),
ContextCompat.getColor(getApplicationContext(), android.R.color.holo_red_dark));
customTextView1.setText(coloredSpan);
}
private void makeSpecificTextBold() {
String textToBeSpanned = customTextView2.getText().toString();
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(textToBeSpanned);
int positionOfSearchedText = textToBeSpanned.indexOf(MAKE_THIS_SPECIFIC_PART_BOLD);
StyleSpan styleSpan = new StyleSpan(android.graphics.Typeface.BOLD);
spannableStringBuilder.setSpan(styleSpan,
positionOfSearchedText,
positionOfSearchedText + MAKE_THIS_SPECIFIC_PART_BOLD.length(),
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
customTextView2.setText(spannableStringBuilder);
}
private void makeTextBoldAndColored() {
String textToBeSpanned = customTextView3.getText().toString();
SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(textToBeSpanned);
int positionOfSearchedText = textToBeSpanned.indexOf(MAKE_THIS_SPECIFIC_PART_BOLD_AND_COLORED);
StyleSpan styleSpan = new StyleSpan(android.graphics.Typeface.BOLD);
spannableStringBuilder.setSpan(styleSpan,
positionOfSearchedText,
positionOfSearchedText + MAKE_THIS_SPECIFIC_PART_BOLD_AND_COLORED.length(),
Spannable.SPAN_INCLUSIVE_INCLUSIVE);
SpannableString coloredBoldSpan = giveMeColoredSpan(
new SpannableString(spannableStringBuilder),
ContextCompat.getColor(getApplicationContext(), android.R.color.holo_red_dark));
customTextView3.setText(coloredBoldSpan);
}
}
actvity_text_view.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical"
tools:context="com.harsh.customtextview.CustomTextViewActivity">
<com.harsh.customtextview.CustomTextView
android:id="@+id/customTextView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
android:text="@string/roboto_regular"
android:textColor="@color/colorPrimary"
android:textSize="18sp"
app:font="@string/font_roboto_regular" />
<com.harsh.customtextview.CustomTextView
android:id="@+id/customTextView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
android:text="@string/themed_text"
android:textColor="@color/colorPrimary"
android:textSize="18sp"
app:theme="@style/roboto_theme" />
<com.harsh.customtextview.CustomTextView
android:id="@+id/customTextView3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
android:text="@string/calculus_sans"
android:textColor="@color/colorPrimary"
android:textSize="18sp"
app:font="@string/font_calculus_sans" />
<Button
android:id="@+id/change_to_roboto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Change to Roboto" />
<Button
android:id="@+id/change_to_calculus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Change to Calculus" />
<Button
android:id="@+id/make_text_colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Make text coloured" />
<Button
android:id="@+id/make_specific_text_bold"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Make specific text bold" />
<Button
android:id="@+id/make_text_bold_and_colored"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="Make text bold and colored" />
</LinearLayout>
</ScrollView>
关于android - StyleSpan 未应用于 TextView 中的 SpannableString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43585376/
我写了几个命令来转换数据框,但我想将我写的代码简化为四个部分。第 1,2 和 3 部分用于计算第 1、2 和 3 列(计算每列重复值的次数,并完成 0 和三列最大值之间的缺失数)。第四部分是加入前面的
我试图理解应用于函数的类型参数。 我想在下面的方法中使用通用类型,但为了我的理解使用 String 和 Int。 当我如下定义一个函数时 def myfunc[Int](f:String => I
我有一个像下面这样的 DIV: // link to some js .js 在 div 中呈现最新的文章摘要。然而,它在 Calibri
我在 GridView 中有以下列,一列是日期,另一列是美元金额。我应用了格式并将 HtmlEncode 属性设置为 false,但值仍然未格式化: 这就是这些值在 GridView 中的显示方式
假设我已经定义了这些类型: data Km = Km Float deriving (Show, Eq) data Mile = Mile Float deriving (Show, Eq
我有一个关于 value in context 的小问题。 取 Just 'a',所以在这种情况下 Maybe 类型上下文中的值是 'a' 采用[3],因此在这种情况下,[a] 类型上下文中的值为3
require(quantmod) require(PerformanceAnalytics) getSymbols('INTC') x<- monthlyReturn(INTC) rollapply
我正在使用 VBA 对“已应用字轨更改”文档进行更改。 红色段落结束标记是插入段落结束标记。(打开“跟踪更改”> 将光标放在第一段末尾 > 按 Enter > 插入新段落内容 > 格式风格不同) 我需
考虑以下代码: class A{ my_method(const B& b){ import_something_from_c(this, b.getC()); // does some
我正在为自定义 Material 分配图像。分配的图像看起来有点像素化,类似于此图像 我已经将抗锯齿设置为 4 倍。我该如何解决这个问题? 最佳答案 尝试将 Material 的 mipFilter
我将样式应用于 元素和 元素。是否可以在 上使用样式元素应用于 似乎不遵循 CSS 特异性的通常规则。这是真的吗? 示例:http://jsfiddle.net/59dpy/ 尝试将所有背景色设为红
有没有办法将垂直虚线边框应用于 没有他们(边界)合并?我说的是附图上的东西——有 3 个 这里的元素,每个元素包含 2 的。如果我申请 border-right: 1px dashed black到
当我在 CSS 中对主体应用线性渐变时,如下所示 body { background: linear-gradient(#10416b, black); } 它不会将它应用到整个网页,而是将它应用到页
当我将边框和边框半径应用于 td 时,内半径是一个直 Angular ,根本不是圆的。 最佳答案 问题很可能是背景不透明的子元素会剪掉边框的内半径。 要解决此问题,您可以在 td 上应用 overfl
基本上,我有一个小的 SVG,它使用一个组来定义一个可重用的符号。该组包括我想在 CSS 中设置动画的路径。我面临的问题是只有“原始”元素应用了 CSS,“使用过”的元素没有。 .player_arr
宽度属性在这里不起作用: td { height: 50px; width: 25px; border: 1px
我想要一个函数(例如)在两种情况下输出 Map 的所有值: Map map1 = new HashMap(); Map map2 = new HashMap(); output(map1, "1234
我被要求将我们应用中的警报对话框的外观与应用主题使用的外观相匹配。 我设法将样式应用于应用程序中的所有警报对话框,并将其用作应用程序主题的一部分,但有些情况下样式应用不正确。 例如,当警报对话框包含“
我有一个 CGPath(由 UIBezierPath 创建),我想通过应用 CGAffineTransformScale 将其缩放到我想要的任何大小。 这会影响我的绘图质量(在转换为图像时)吗?如果不
您好,我已经在 vector 上使用了一些 STL 算法,例如 find_if、count_if、sort、push_back 等。现在我想为所有容器对象( vector 、列表、映射、集合)制作一个
我是一名优秀的程序员,十分优秀!