处理长字符串和 TextView 行为
Dealing with long Strings & TextView behavior
我正在开发一个 android 应用程序,它从服务器获取 objects 并将它们显示在一个简单的列表中。
我正在想办法处理长 object 的标题:
每个标题填充一个指定的 multi-line TextView。
如果标题超过 16 个字符,就会与我想要的 UI.
混淆
有两种情况我需要解决-
1).如果标题超过 16 个字符且包含多个单词,我需要将单词分成不同的行(我尝试 .split("")
和 .trim()
,但我不想使用另一种视图, 只是在同一行中换行,("")
中的使用对我来说似乎不可靠。
2).如果标题超过16个字符且只包含一个长字,我只需要专门更改字体大小即可。
有什么好的、可靠的解决方案吗?
非常感谢。
对单个视图使用 SpannableString
标题:
SpannableString titleSpan = new SpannableString("title String");
titleSpan.setSpan(new RelativeSizeSpan(1.3f), 0, titleSpan.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
留言
SpannableString messageSpan = new SpannableString("Message String");
messageSpan.setSpan(new RelativeSizeSpan(1.0f), 0, messageSpan.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
在TextView中设置
tvTermsPolicyHeading.setText(TextUtils.concat(titleSpan, messageSpan));
如果有多个单词,您可以使用“\n”拆分然后连接单词。
如果是长字
你可以在这里看到这个问题
Auto-fit TextView for Android
下面的代码将按您的需要工作
String title; //your title
//find length of your title
int length = title.length();
if (length>16){
string[] titles = myString.split("\s+");
int size = titles.length;
if (size < 2){
yourTextview.setText(title);
// reduce the text size of your textview
}else {
String newTitle= "";
for (int i=0;i<titles.length;i++){
newTitle = titles[i]+"\n"
}
yourTextview.setText(newTitle);
}
}
试试这个:
if(title.split(" ").size > 1){
String line1 = title.substring(0, 16);
int end = line1.lastIndexOf(" ");
titleTextView.setText(title.substring(0,end) + "\n" +
title.substring(end+1,title.size-1);
}else{
titleTextView.setText(title);
titleTextView.setTextSize(yourTextSize);
}
此代码应该非常适合您的情况。
我正在开发一个 android 应用程序,它从服务器获取 objects 并将它们显示在一个简单的列表中。
我正在想办法处理长 object 的标题: 每个标题填充一个指定的 multi-line TextView。 如果标题超过 16 个字符,就会与我想要的 UI.
混淆有两种情况我需要解决-
1).如果标题超过 16 个字符且包含多个单词,我需要将单词分成不同的行(我尝试 .split("")
和 .trim()
,但我不想使用另一种视图, 只是在同一行中换行,("")
中的使用对我来说似乎不可靠。
2).如果标题超过16个字符且只包含一个长字,我只需要专门更改字体大小即可。
有什么好的、可靠的解决方案吗?
非常感谢。
对单个视图使用 SpannableString
标题:
SpannableString titleSpan = new SpannableString("title String");
titleSpan.setSpan(new RelativeSizeSpan(1.3f), 0, titleSpan.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
留言
SpannableString messageSpan = new SpannableString("Message String");
messageSpan.setSpan(new RelativeSizeSpan(1.0f), 0, messageSpan.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
在TextView中设置
tvTermsPolicyHeading.setText(TextUtils.concat(titleSpan, messageSpan));
如果有多个单词,您可以使用“\n”拆分然后连接单词。 如果是长字 你可以在这里看到这个问题 Auto-fit TextView for Android
下面的代码将按您的需要工作
String title; //your title
//find length of your title
int length = title.length();
if (length>16){
string[] titles = myString.split("\s+");
int size = titles.length;
if (size < 2){
yourTextview.setText(title);
// reduce the text size of your textview
}else {
String newTitle= "";
for (int i=0;i<titles.length;i++){
newTitle = titles[i]+"\n"
}
yourTextview.setText(newTitle);
}
}
试试这个:
if(title.split(" ").size > 1){
String line1 = title.substring(0, 16);
int end = line1.lastIndexOf(" ");
titleTextView.setText(title.substring(0,end) + "\n" +
title.substring(end+1,title.size-1);
}else{
titleTextView.setText(title);
titleTextView.setTextSize(yourTextSize);
}
此代码应该非常适合您的情况。