我的textView
里面有一个数字(变量)和一个string
,我怎样才能给出比string
大一号的数字?
代码:
TextView size = (TextView)convertView.findViewById(R.id.privarea_list_size);
if (ls.numProducts != null) {
size.setText(ls.numProducts + " " + mContext.getString(R.string.products));
}
我希望ls.numproducts的大小与文本的其他部分不同。怎么办?
答案 0 :(得分:313)
使用Spannable String
String s= "Hello Everyone";
SpannableString ss1= new SpannableString(s);
ss1.setSpan(new RelativeSizeSpan(2f), 0,5, 0); // set size
ss1.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);// set color
TextView tv= (TextView) findViewById(R.id.textview);
tv.setText(ss1);
快照
您可以使用空格分割字符串,并将span添加到您需要的字符串中。
String s= "Hello Everyone";
String[] each = s.split(" ");
现在将span
应用于string
并将其添加到textview
。
答案 1 :(得分:100)
如果您想知道如何在同一文本视图中设置多个不同的尺寸,但是使用绝对尺寸而不是相对尺寸,则可以使用AbsoluteSizeSpan
代替{{{ 1}}。
只需获得所需文字大小的像素尺寸
RelativeSizeSpan
然后根据文字
创建一个新的int textSize1 = getResources().getDimensionPixelSize(R.dimen.text_size_1);
int textSize2 = getResources().getDimensionPixelSize(R.dimen.text_size_2);
AbsoluteSpan
答案 2 :(得分:9)
您可以使用html字符串完成此操作,并使用
将html设置为Textview
txtView.setText(Html.fromHtml("Your html string here"));
例如:
txtView.setText(Html.fromHtml("<html><body><font size=5 color=red>Hello </font> World </body><html>"));`
答案 3 :(得分:2)
方法1
public static void increaseFontSizeForPath(Spannable spannable, String path, float increaseTime) {
int startIndexOfPath = spannable.toString().indexOf(path);
spannable.setSpan(new RelativeSizeSpan(increaseTime), startIndexOfPath,
startIndexOfPath + path.length(), 0);
}
使用
Utils.increaseFontSizeForPath(spannable, "big", 3); // make "big" text bigger 3 time than normal text
方法2
public static void setFontSizeForPath(Spannable spannable, String path, int fontSizeInPixel) {
int startIndexOfPath = spannable.toString().indexOf(path);
spannable.setSpan(new AbsoluteSizeSpan(fontSizeInPixel), startIndexOfPath,
startIndexOfPath + path.length(), 0);
}
使用
Utils.setFontSizeForPath(spannable, "big", (int) textView.getTextSize() + 20); // make "big" text bigger 20px than normal text
答案 4 :(得分:1)
试试spannableStringbuilder。使用这个,我们可以创建多种字体大小的字符串。
答案 5 :(得分:1)
我编写了自己的函数,需要2个字符串和1个int(文本大小)
要更改文字大小的全文和部分文字。
它返回一个SpannableStringBuilder,您可以在文本视图中使用它。
public static SpannableStringBuilder setSectionOfTextSize(String text, String textToChangeSize, int size){
SpannableStringBuilder builder=new SpannableStringBuilder();
if(textToChangeSize.length() > 0 && !textToChangeSize.trim().equals("")){
//for counting start/end indexes
String testText = text.toLowerCase(Locale.US);
String testTextToBold = textToChangeSize.toLowerCase(Locale.US);
int startingIndex = testText.indexOf(testTextToBold);
int endingIndex = startingIndex + testTextToBold.length();
//for counting start/end indexes
if(startingIndex < 0 || endingIndex <0){
return builder.append(text);
}
else if(startingIndex >= 0 && endingIndex >=0){
builder.append(text);
builder.setSpan(new AbsoluteSizeSpan(size, true), startingIndex, endingIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}else{
return builder.append(text);
}
return builder;
}
答案 6 :(得分:1)
private SpannableStringBuilder SpannableStringBuilder(final String text, final char afterChar, final float reduceBy) {
RelativeSizeSpan smallSizeText = new RelativeSizeSpan(reduceBy);
SpannableStringBuilder ssBuilder = new SpannableStringBuilder(text);
ssBuilder.setSpan(
smallSizeText,
text.indexOf(afterChar),
text.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
);
return ssBuilder;
}
------------------------
TextView textView =view.findViewById(R.id.textview);
String s= "123456.24";
textView.setText(SpannableStringBuilder(s, '.', 0.7f));
----------------结果---------------
12345. 24
答案 7 :(得分:1)
做到这一点的最佳方法是HTML,而不用对您的文本进行子字符串化和完全动态化 例如:
public static String getTextSize(String text,int size) {
return "<span style=\"size:"+size+"\" >"+text+"</span>";
}
,您可以使用颜色属性等。 如果是另一只手:
size.setText(Html.fromHtml(getTextSize(ls.numProducts,100) + " " + mContext.getString(R.string.products));
答案 8 :(得分:0)
如果您想避免给翻译人员带来太多混乱,我想出了一种在字符串中仅包含占位符的方法,该方法将在代码中处理。
因此,假设您在字符串中包含此内容:
val textToPutAsPlaceHolder = "123"
val formattedStr = getString(R.string.test, "$textToPutAsPlaceHolder<bc/>")
val placeHolderTextSize = resources.getDimensionPixelSize(R.dimen.some_text_size)
val placeHolderTextColor = ContextCompat.getColor(this, R.color.design_default_color_primary_dark)
val textToShow = HtmlCompat.fromHtml(formattedStr, HtmlCompat.FROM_HTML_MODE_LEGACY, null, object : Html.TagHandler {
var start = 0
override fun handleTag(opening: Boolean, tag: String, output: Editable, xmlReader: XMLReader) {
when (tag) {
"bc" -> if (!opening) start = output.length - textToPutAsPlaceHolder.length
"html" -> if (!opening) {
output.setSpan(AbsoluteSizeSpan(placeHolderTextSize), start, start + textToPutAsPlaceHolder.length, 0)
output.setSpan(ForegroundColorSpan(placeHolderTextColor), start, start + textToPutAsPlaceHolder.length, 0)
}
}
}
})
textView.text = textToShow
并且您希望占位符文本具有不同的大小和颜色,可以使用以下方法:
var table = document.getElementById('table');
var button = document.getElementById('button');
for (var i = 0; i < table.rows.length; i++) {
table.rows[i].onclick = function () {
document.getElementById("fname").value = this.cells[0].innerHTML;
document.getElementById("lname").value = this.cells[1].innerHTML;
document.getElementById("age").value = this.cells[2].innerHTML;
};
}
结果:
答案 9 :(得分:0)
kotlin 爱好者的 Utils 方法
fun String.setFontSizeForPath(path: String, fontSizeInPixel: Int, colorCode: String = "#FF0000"): SpannableString {
val spannable = SpannableString(this)
val startIndexOfPath = spannable.toString().indexOf(path)
spannable.setSpan(
AbsoluteSizeSpan(fontSizeInPixel),
startIndexOfPath,
startIndexOfPath + path.length,
0
)
spannable.setSpan(
ForegroundColorSpan(Color.parseColor(colorCode)),
startIndexOfPath,
startIndexOfPath + path.length,
0
)
return spannable
}
<块引用>
使用
text_view.text = "A B C D".setFontSizeForPath("B",30)
答案 10 :(得分:-2)
在Kotlin中,使用html进行以下操作
HtmlCompat.fromHtml("<html><body><h1>This is Large Heading :-</h1><br>This is normal size<body></html>",HtmlCompat.FROM_HTML_MODE_LEGACY)