提取字符串的一部分并将其更改为粗体,然后将其添加到TextView

时间:2018-12-21 20:17:57

标签: android android-studio textview

我有一个带有一些句子的文本字符串,例如:

  

Lorem ipsum dolor坐在amet,consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labour [et dolore magna aliquyam erat],sed diam voluptua。 ?在vero eos et accusam et justo duo dolores et ea rebum。 Stet Clita Kasd Gubergren

在本文中,我添加了两个方括号“ [,]”,它们应位于要以粗体显示的部分。

现在,要使用此正则表达式提取这些括号之间的部分:

(?<=\[).+?(?=\])

使用以下粗体显示:

SpannableStringBuilder str = new SpannableStringBuilder("regex here");
str.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

并将其添加到一个字符串中并在TextView中显示。

我有执行此操作的功能,但是我不知道如何组合它。

希望你们能帮助我

1 个答案:

答案 0 :(得分:1)

在这里,我为您提供了一个小例子。正是您想要的。

public class TestActivity extends AppCompatActivity {
    private Button button;
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_first);
        button = findViewById(R.id.button_action);
        textView = findViewById(R.id.title);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String text = "Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore [et dolore magna aliquyam erat], sed diam voluptua. ?At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren";
                Pattern pattern = Pattern.compile("\\[[\\w ]+\\]");
                Matcher matcher = pattern.matcher(text);
                while (matcher.find())
                    text = text.replace(matcher.group(), matcher.group().replace("[", "<b>").replace("]", "</b>"));
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    textView.setText(Html.fromHtml(text, Html.FROM_HTML_MODE_COMPACT));
                } else {
                    textView.setText(Html.fromHtml(text));
                }
            }
        });
    }
}