2015-08-24 9 views
1

Из-за использования HTML в строчном ресурсе я не могу преобразовать его в строку из charsequence (иначе я потеряю форматирование).Android Charsequence - замена текста

<string name="exponent_key">x<sup><small>y</small></sup>/string> 

После использования getString() я хочу заменить «у» с «другими вещами», но как вы делаете это? Это похоже на простой вопрос, но по какой-то причине я ничего не могу с этим поделать.

Редактировать: Теперь, когда я думаю об этом, могу ли я преобразовать charsequence в строку, содержащую код HTML, а затем преобразовать ее обратно в charsequence позже?

Редактировать: Забыл упомянуть, что строка получает название кнопки, а затем извлекается (где она затем используется).

+0

прежде всего, <строка имя = «exponent_key»> х у второй, попробуйте использовать его в программе, определить его в виде строки, а затем перебрать всю строку, символ на гольца, и когда вы дойдете до символа «y», получите позицию, а затем измените символ в этой позиции с помощью того, что вы хотите –

+0

К сожалению, это была опечатка в сообщении. Проблема в том, что я определяю его как строку, форматирование исчезает. – Dylanthepiguy

+0

http://stackoverflow.com/questions/3235131/set-textview-text-from-html-formatted-string-resource-in-xml попробуйте это. –

ответ

0

Существует. Создайте функцию, в которой в качестве параметра вы берете строку, которая должна быть отформатирована. И в функции, вы просто взять его через itterator, и после этого Html.fromHtml()

0

Давайте разберем свой вопрос в нескольких этапах:

  • Замены у с «другими вещами» можно сделать как это:

    String.format("%1$", "otherStuff"); 
    
  • Если вы используете GetString(), вы можете сделать то же самое, что, как:

    <string name="exponent_key">%1$</string> 
    
    --- 
    
    String string = getString(R.string.exponent_key, "otherStuff"); 
    
  • Для более одного элемента, сделайте так: вы можете сделать это так:

    <string name="string_name">%1$ : %2$</string> 
    
    --- 
    
    getString(R.string.string_name, new String[]{"hello", "world"}); 
    
  • В XML вы можете не гнездятся HTML-код, так как HTML другой тип XML и анализатор путает и не может узнайте, какие теги для Android и что для HTML. Но ... есть трюк. Вы можете сделать это следующим образом:

    <string name="exponent_key"><![CDATA[x<sup><small>%1$</small>/sup>]]></string> 
    
  • Таким образом, со строкой выше в вашем XML, просто использовать и все в порядке:

    getString(R.string.exponent_key, "otherStuff"); 
    
  • Примечание: если вам нужно, чтобы показать HTML в TextView, просто использовать Html.fromHtml:

    textView.setText(Html.fromHtml(getString(R.string.exponent_key, "otherStuff"))); 
    
+0

Что такое '% 2 $'? И не бит CDATA быть внутри тегов типа '<строка имя = "exponent_key" у]]>'? Не могли бы вы объяснить, что делает формат и getString с двумя аргументами? – Dylanthepiguy

+0

Да, вы правы в отношении CDATA (исправлено в моем сообщении), в отношении% 2 $ и т. Д., Я добавил его в сообщение – Filnik

+0

Но что означает этот% 1 $? – Dylanthepiguy

0

в вашем string.xml

<string name="exponent_key">x<sup><small>%1$d</small></sup></string> 

в коде

textView.setText(getString(R.string.exponent_key,2)) 
0

Рассмотрим эффект, который вы хотите достичь. вы можете сделать вот так.

SpannableString ss = new SpannableString("2"); 
     // set superscript 
     ss.setSpan(new SuperscriptSpan(),0,ss.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     // set font size 
     ss.setSpan(new AbsoluteSizeSpan(12,true),0,ss.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
     tv.append(ss); 

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

  • Нет связанных вопросов^_^