【问题标题】: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);
    
    }
    }
    

    【讨论】:

      【解决方案3】:

      如果有多个单词,您可以使用“\n”拆分然后连接单词。 长字的情况下 你可以在这里看到这个问题 Auto-fit TextView for Android

      【讨论】:

        【解决方案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);
        }
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-28
          • 2017-06-23
          • 1970-01-01
          • 2016-11-24
          • 1970-01-01
          • 1970-01-01
          • 2021-11-15
          • 1970-01-01
          相关资源
          最近更新 更多