Работа с длинными строками и поведением TextView - PullRequest
0 голосов
/ 26 декабря 2018

Я разрабатываю приложение для Android, которое получает объекты с сервера и показывает их в виде простого списка.

Я пытаюсь понять, как обращаться с длинными названиями объектов: каждый заголовок заполняет назначенныймногострочный TextView.Если заголовок длиннее 16 символов, он портится с моим желаемым пользовательским интерфейсом.

Есть два сценария, которые мне нужно решить -

1).Если заголовок длиннее 16 символов и содержит более одного слова, мне нужно разбить слова на разные строки (я пытался .split("") и .trim(), но я не хочу использовать другое представление, просто разбитьв той же строке, и использование в ("") кажется мне ненадежным).

2).Если заголовок длиннее 16 символов и содержит только одно длинное слово, мне нужно только конкретно изменить размер шрифта.

Есть идеи для хорошего и надежного решения?

Заранее большое спасибо.

Ответы [ 4 ]

0 голосов
/ 26 декабря 2018

попробуйте это:

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

этот код должен отлично работать для вашего случая.

0 голосов
/ 26 декабря 2018

Вы можете разделить, а затем объединить слова, используя "\ n", если есть более одного слова.В случае длинного слова Вы можете увидеть этот вопрос здесь Auto-Fit TextView для Android

0 голосов
/ 26 декабря 2018

Код, как показано ниже, будет работать так, как вам нужно

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);

}
}
0 голосов
/ 26 декабря 2018

используйте 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...