我正在开发一个可从服务器获取对象并将其显示在简单列表中的android应用。
我试图弄清楚如何处理长对象的标题: 每个标题都填充一个指定的多行TextView。 如果标题超过16个字符,则会与我想要的用户界面混淆。
我需要解决两种情况-
1)。如果标题长度超过16个字符且包含多个单词,则需要将单词分成不同的行(我尝试使用.split("")
和.trim()
,但是我不想使用其他视图,只需在同一行中换行,对("")
的使用对我来说似乎是不可靠的。)
2)。如果标题超过16个字符并且只包含一个长字,则只需更改字体大小即可。
有什么好的和可靠的解决方案的想法吗?
非常感谢。
答案 0 :(得分: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));
答案 1 :(得分:0)
如果有多个单词,则可以使用“ \ n”拆分并连接单词。 如果是长字 你可以在这里看到这个问题 Auto-fit TextView for Android
答案 2 :(得分:0)
如下所示的代码将根据需要工作
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);
}
}
答案 3 :(得分:0)
尝试一下:
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);
}
此代码应适合您的情况。