处理长字符串和 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);
}

此代码应该非常适合您的情况。