2016-06-14 1 views
1

Как мы видим в https://stackoverflow.com/a/10144094/3286489, мы могли бы добавить аргументы в наш параметр String через% 1 $ d и т. Д. Но я не знаю, как добавить туда изображение.Возможно ли вставить изображение в TextView с использованием метода строковых аргументов?

Мы можем добавить изображение в нашу строку, как мы видим в https://stackoverflow.com/a/3177667/3286489, используя spannable. Но положение изображения в тексте должно быть явно указано.

Итак, мой вопрос в том, как мы можем вставить наше изображение в TextView (я использую spannable), используя параметризованный подход как https://stackoverflow.com/a/10144094/3286489?

ответ

1

Вот что я сделал раньше:

например. ваша строка может быть: «Это [img]».

Найти позицию "[IMG]" и заменить его ImageSpan

EDIT: Regex модель может быть что-то вроде

String message = "This is an [img]"; 
Pattern MY_PATTERN = Pattern.compile("\\[img\\]"); 
Matcher matcher = MY_PATTERN.matcher(message); 
// Check all occurrences 
while (matcher.find()) { 
    System.out.print("Start index: " + matcher.start()); 
    System.out.print(" End index: " + matcher.end()); 
} 
+0

Thanks Malvin. Вот что я сделал сейчас. Но я думаю, что если найти позицию можно было бы автоматически, как функция аргумента в строковых ресурсах, которые у нас есть, без необходимости делать indexOf из строки. – Elye

+0

По позиции вы имеете в виду позицию тега «[img]» или положение используемого изображения, например. 'displayImage (« Это второе изображение% 2 $ img и первое изображение% 1 $ img », firstImage, secondImage);' – Malvin

+0

Ya, что-то в этом роде ... Так что мне не нужно делать совпадение и т. д. – Elye

0
  1. string.xml

    <string name="var">Image %1$s and %2$s</string> 
    
  2. MainActivity.java

    TextView textView = (TextView) findViewById(R.id.text); 
    String v1 = "%1$s"; 
    String v2 = "%2$s"; 
    String test = getString(R.string.var, v1, v2); 
    
    Spannable span = Spannable.Factory.getInstance().newSpannable(test); 
    
    span.setSpan(new ImageSpan(getBaseContext(), android.R.drawable.star_on), 
         test.indexOf(v1), test.indexOf(v1) + v1.length(), 
         Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    
    span.setSpan(new ImageSpan(getBaseContext(), android.R.drawable.star_on), 
         test.indexOf(v2), test.indexOf(v2) + v2.length(), 
         Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    
    textView.setText(span);