如何在 Android 中以编程方式编写字符串的一部分粗体?



我一直在互联网上搜索我的问题的解决方案。我需要写一些带有标题的文字。标题应该加粗。我在互联网上发现的是如何将整个字符串写成粗体。

例如

第 1 步:打开安卓工作室

第二步:...

在安卓中是如何完成的?可以这样做,还是我必须拆分字符串,例如标题应该是一个单独的字符串。

我已经在Android上尝试过HTML标签,但我得到了一个java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference

这是我在安卓中尝试过的

String[] text = new String[2];
text[0] = "<b>" + "Den første bøn er middagsbønnen" + "</b>" + "Den anden bøn er eftermiddagsbønnen"
tvTitle.setText(Html.fromHtml(text[mPage])); //This line triggers the exception

mPage只是选项卡的页面,因为我只希望文本出现在一个选项卡中。

编辑:

我的班级

public class PageFragment_Bontider extends Fragment{
public static final String ARG_PAGE = "ARG_PAGE";
private int mPage;
public static PageFragment_Bontider newInstance(int page) {
Bundle args = new Bundle();
args.putInt(ARG_PAGE, page);
PageFragment_Bontider  fragment = new PageFragment_Bontider ();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPage = getArguments().getInt(ARG_PAGE);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_bontider, container, false);
TextView tvTitle = (TextView) view.findViewById(R.id.bonner);
ImageView bontider = (ImageView) view.findViewById(R.id.imageView);
String[] text = new String[2];
text[1] = "Iblandt forpligtelserne for enhver ansvarlig (mukallaf) er udførelse af de fem " +
"bønner i løbet af dagen og natten. Eftersom kendskabet til disse bøntider er en " +
"pligt for enhver ansvarlig, gøres der rede for dem i det følgende:nn" +
"Den første bøn er middagsbønnen (Adh-Dhuhr), hvis tid indtræder, når solen aftager " +
"fra sit højeste punkt på himlen (midten af himlen) mod vest, og udtræder når skyggen" +
" af en tilfældig genstand bliver lige så lang som en genstands egen længde adderet " +
"med længden af kulminationsskyggen. Kulminationsskyggen er den målte skygge, når " +
"solen er ved sit højeste punkt i løbet af en dag.nn" +
"Den anden bøn er eftermiddagsbønnen (Al-^asr), hvis tid varer fra middagsbønnens " +
"udtrædelse til solnedgang (når hele solskiven er forsvundet).nn" +
"Den tredje bøn er solnedgangsbønnen (Al-Maghrib), hvis tid indtræder fra " +
"eftermiddagsbønnens udtrædelse, og udtræder når det rødlige skumringslys " +
"(svagt lys der dukker op i den vestlige horisont efter solnedgang) er forsvundet.nn" +
"Den fjerde bøn er natbønnen (Al-^Ishaa´), hvis tid indtræder ved solnedgangsbønnens " +
"udtrædelse, og udtræder ved frembrudet af det sande daggry (Al-Fadjir As-Saadiq), " +
"hvilket er det vandrette lys, der viser sig i den østlige horisont, som et tyndt " +
"skær der dernæst udbreder sig.nn" +
"Den femte bøn er morgenbønnen (As-Subh), hvis tid indtræder ved natbønnens udtrædelse, " +
"og udtræder ved solopgang (Shuruuq).";
tvTitle.setText(text[mPage]);
int[] billede = new int[2];
billede[0] = R.drawable.bontider;
if(billede[mPage] != 0){
bontider.setVisibility(View.VISIBLE);
bontider.setImageResource(billede[mPage]);
tvTitle.setVisibility(View.GONE);
}
return view;
}
}

无需创建单独的文本视图。您可以使用SpannableString来实现您的目标。以下是以不同方式更改字符串样式的示例代码。您只需要计算字符串内的开始和结束索引。

SpannableString styledString
= new SpannableString("Largenn"     // index 0 - 5
+ "Boldnn"          // index 7 - 11
+ "Underlinednn"    // index 13 - 23
+ "Italicnn"        // index 25 - 31
+ "Strikethroughnn" // index 33 - 46
+ "Colorednn"       // index 48 - 55
+ "Highlightednn"   // index 57 - 68
+ "K Superscriptnn" // "Superscript" index 72 - 83 
+ "K Subscriptnn"   // "Subscript" index 87 - 96
+ "Urlnn"           //  index 98 - 101
+ "Clickablenn");   // index 103 - 112
// make the text twice as large
styledString.setSpan(new RelativeSizeSpan(2f), 0, 5, 0);
// make text bold
styledString.setSpan(new StyleSpan(Typeface.BOLD), 7, 11, 0);
// underline text
styledString.setSpan(new UnderlineSpan(), 13, 23, 0);
// make text italic
styledString.setSpan(new StyleSpan(Typeface.ITALIC), 25, 31, 0);
styledString.setSpan(new StrikethroughSpan(), 33, 46, 0);
// change text color
styledString.setSpan(new ForegroundColorSpan(Color.GREEN), 48, 55, 0);
// highlight text
styledString.setSpan(new BackgroundColorSpan(Color.CYAN), 57, 68, 0);
// superscript
styledString.setSpan(new SuperscriptSpan(), 72, 83, 0);
// make the superscript text smaller
styledString.setSpan(new RelativeSizeSpan(0.5f), 72, 83, 0);
// subscript
styledString.setSpan(new SubscriptSpan(), 87, 96, 0);
// make the subscript text smaller
styledString.setSpan(new RelativeSizeSpan(0.5f), 87, 96, 0);
// url
styledString.setSpan(new URLSpan("http://www.google.com"), 98, 101, 0);
// clickable text
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
// We display a Toast. You could do anything you want here.
Toast.makeText(SpanExample.this, 
"Clicked",Toast.LENGTH_SHORT).show();
}
};
styledString.setSpan(clickableSpan, 103, 112, 0);
// this step is mandated for the url and clickable styles.
textView.setMovementMethod(LinkMovementMethod.getInstance());
// make it neat
textView.setGravity(Gravity.CENTER);
tvTitle.setText(styledString);

您可以使用文本范围。

SpannableStringBuilder builder = new SpannableStringBuilder("Hello, world!"); StyleSpan span = new StyleSpan(android.graphics.Typeface.BOLD); builder.setSpan(span, 0, 4, Spannable.SPAN_INCLUSIVE_INCLUSIVE);

设置文本时,直接传递生成器而不调用toString()

最新更新