处理长字符串和TextView行为

时间:2018-12-26 12:40:48

标签: java android string android-layout textview

我正在开发一个可从服务器获取对象并将其显示在简单列表中的android应用。

我试图弄清楚如何处理长对象的标题: 每个标题都填充一个指定的多行TextView。  如果标题超过16个字符,则会与我想要的用户界面混淆。

我需要解决两种情况-

1)。如果标题长度超过16个字符且包含多个单词,则需要将单词分成不同的行(我尝试使用.split("").trim(),但是我不想使用其他视图,只需在同一行中换行,对("")的使用对我来说似乎是不可靠的。)

2)。如果标题超过16个字符并且只包含一个长字,则只需更改字体大小即可。

有什么好的和可靠的解决方案的想法吗?

非常感谢。

4 个答案:

答案 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);
}

此代码应适合您的情况。