【问题标题】:Dealing with long Strings & TextView behavior处理长字符串和 TextView 行为
【发布时间】:2018-12-26 12:40:47
【问题描述】:
我正在开发一个 android 应用程序,它从服务器获取对象并将它们显示在一个简单的列表中。
我试图弄清楚如何处理长对象的标题:
每个标题都填充一个指定的多行 TextView。
如果标题超过 16 个字符,它会与我想要的 UI 混淆。
我需要解决两种情况 -
1)。如果标题超过 16 个字符并且包含多个单词,我需要将单词拆分为不同的行(我尝试了 .split("") 和 .trim(),但我不想使用其他视图,只需打破在同一行中,("") 中的使用对我来说似乎不可靠)。
2)。如果标题超过16个字符且只包含一个长词,我只需要专门更改字体大小即可。
有什么好的可靠解决方案的想法吗?
非常感谢。
【问题讨论】:
标签:
java
android
string
android-layout
textview
【解决方案1】:
将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));
【解决方案2】:
下面的代码可以根据需要工作
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);
}
}
【解决方案4】:
试试这个:
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);
}
这段代码应该非常适合您的情况。