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

时间:2018-05-01 14:43:30

标签: java android text-formatting

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

E.g。

第1步:打开Android Studio

第2步: ............

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

我在Android上尝试过HTML标记,但我得到了Macintosh:pokedex TimLowe$ npm install > fsevents@1.1.3 install /Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents > node install node-pre-gyp ERR! Tried to download(404): https://fsevents-binaries.s3-us-west-2.amazonaws.com/v1.1.3/fse-v1.1.3-node-v64-darwin-x64.tar.gz node-pre-gyp ERR! Pre-built binaries not found for fsevents@1.1.3 and node@10.0.0 (node-v64 ABI, unknown) (falling back to source compile with node-gyp) xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance action_after_build.target.mk:6: *** target pattern contains no `%'. Stop. gyp ERR! build error gyp ERR! stack Error: `make` failed with exit code: 2 gyp ERR! stack at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23) gyp ERR! stack at ChildProcess.emit (events.js:182:13) gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:225:12) gyp ERR! System Darwin 15.6.0 gyp ERR! command "/usr/local/Cellar/node/9.11.1/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "build" "--fallback-to-build" "--module=/Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node" "--module_name=fse" "--module_path=/Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64" gyp ERR! cwd /Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents gyp ERR! node -v v10.0.0 gyp ERR! node-gyp -v v3.6.2 gyp ERR! not ok node-pre-gyp ERR! build error node-pre-gyp ERR! stack Error: Failed to execute '/usr/local/Cellar/node/9.11.1/bin/node /usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node --module_name=fse --module_path=/Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64' (1) node-pre-gyp ERR! stack at ChildProcess.<anonymous> (/Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents/node_modules/node-pre-gyp/lib/util/compile.js:83:29) node-pre-gyp ERR! stack at ChildProcess.emit (events.js:182:13) node-pre-gyp ERR! stack at maybeClose (internal/child_process.js:947:16) node-pre-gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:236:5) node-pre-gyp ERR! System Darwin 15.6.0 node-pre-gyp ERR! command "/usr/local/Cellar/node/9.11.1/bin/node" "/Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents/node_modules/node-pre-gyp/bin/node-pre-gyp" "install" "--fallback-to-build" node-pre-gyp ERR! cwd /Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents node-pre-gyp ERR! node -v v10.0.0 node-pre-gyp ERR! node-pre-gyp -v v0.6.39 node-pre-gyp ERR! not ok Failed to execute '/usr/local/Cellar/node/9.11.1/bin/node /usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js build --fallback-to-build --module=/Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64/fse.node --module_name=fse --module_path=/Users/TimLowe/Desktop/CodeBridge:WDI/gitHub/homeworks/react-pokeapp-homework/pokedex/node_modules/fsevents/lib/binding/Release/node-v64-darwin-x64' (1) npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 (node_modules/fsevents): npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@1.1.3 install: `node install` npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1 up to date in 97.145s Macintosh:pokedex TimLowe$

这是我在Android中尝试的内容

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

2 个答案:

答案 0 :(得分:2)

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

SpannableString styledString
  = new SpannableString("Large\n\n"     // index 0 - 5
       + "Bold\n\n"          // index 7 - 11
       + "Underlined\n\n"    // index 13 - 23
       + "Italic\n\n"        // index 25 - 31
       + "Strikethrough\n\n" // index 33 - 46
       + "Colored\n\n"       // index 48 - 55
       + "Highlighted\n\n"   // index 57 - 68
       + "K Superscript\n\n" // "Superscript" index 72 - 83 
       + "K Subscript\n\n"   // "Subscript" index 87 - 96
       + "Url\n\n"           //  index 98 - 101
       + "Clickable\n\n");   // 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);

答案 1 :(得分:0)

您可以使用文字范围。

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

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