2012-06-01 2 views
0

У меня возникла проблема с определением того, какой маршрут будет идти, когда дело доходит до производительности макетов в Android. У меня довольно большой макет, который нужно заполнить текстом из API. Теперь проблема заключается в том, что заголовки должны быть в жирным шрифтом. Для упрощения это выглядит примерно так.Производительность макета Android со стилизованным текстом

Титр 1: Lorem Ipsum ...
Надпись 2: Lorem Ipsum ...
Надпись 3: Lorem Ipsum ...
и т.д ..

Как я вижу у меня есть 2 варианта. Либо я иду за 2 просмотров, чтобы сделать это, что-то вроде

 <LinearLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" > 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Caption 1" 
       android:textStyle="bold" /> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Lorem ipsum..." /> 

     </LinearLayout> 

или я иду на один TextView и использовать

Html.fromHtml("<b>Caption 1</b> Lorem ipsum") 

мне интересно, из тех, кто имеет какие-либо цифры на производительность на двух подходах. Учитывая большой взгляд, который я должен показать, было бы замечательно знать. Похоже, вариант 2 лучше, но у меня нет никаких доказательств этого, и у меня нет времени проверять их обоих.

Cheers!

Edit: Я забыл упомянуть, что у меня есть некоторый контроль над API, а поэтому я могу вставлять HTML в API и отправить обратно строки в виде

"<b>Caption</b> Lorem ipsum...". 

Судя из двух исходных ответов первый подход выходит из окна.

+0

Вы можете изменить API, но что, если в будущем вы хотите, чтобы он был курсивным, а не полужирным? Затем вам нужно снова изменить API. Что делать, если некоторые ответы должны отличаться от других на основе информации, собранной во время выполнения? Я бы предположил, что безопаснее и чище обрабатывать его в коде, если есть известный шаблон «Caption():», который вам нужно стилизовать. – kcoppock

ответ

1

Если вы действительно ищете более высокую производительность, я бы посоветовал вам использовать SpannableStringBuilder вместо Html.fromHtml.

Html.fromHtml на самом деле использует SpannableStringBuilder в его реализации, но при условии, что fromHtml также требует времени для фактического анализа вашей строки html (и добавить к этому время, когда вам нужно обернуть текст в тегах html), он будет работать медленнее, чем SpannableStringBuilder

и любой из этих вариантов будет быстрее, чем заполнение и поддержание мнения XMLs

PS Я даже немного статьи о SpannableStringBuilder, чтобы вы начали: http://illusionsandroid.blogspot.com/2011/05/modifying-coloring-scaling-part-of-text.html

+0

Да, я тоже посмотрел на это, но со всей разной степенью всего, что от API, это заставляет меня несколько нерешительно использовать, так как я должен указать каждый диапазон. edit: У меня также есть (некоторый) контроль над API, поэтому я могу отправить его правильно сформированные строки с уже встроенным HTML – Slim

0

< I 3 Regex, так что мне нравится метод, как это:

String myCaption = "Caption 1: Lorem Ipsum..."; 
TextView tv = (TextView)findViewById(R.id.mytextview); 

//Set a Regex pattern to find instances of "Caption X:" 
//where X is any integer. 
Pattern pattern = Pattern.compile("Caption [0-9]+:"); 

//Get a matcher for the caption string and find the first instance 
Matcher matcher = pattern.matcher(myCaption); 
matcher.find(); 

//These are the start and ending indexes of the discovered pattern 
int startIndex = matcher.start(); 
int endIndex = matcher.end(); 

//Sets a BOLD span on the 
Spannable textSpan = new Spannable(myCaption); 
textSpan.setSpan(new StyleSpan(Typeface.BOLD), 
    startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 

//Set this Spannable as the TextView text 
tv.setText(textSpan); 

Я не проверял это, но идея должна получить вы идете, даже если это не работает, поскольку это дословно. В основном, используйте регулярное выражение, чтобы найти часть «Caption X:» в строке, получить начальные и конечные индексы и установить жирный пробел в этом конкретном разделе текста.

Смежные вопросы