Попробуйте, чтобы вам не пришлось взламывать использование TextView. Это позволит вам учитывать произвольное количество изображений, помеченных в исходной строке. он также учитывает смежные изображения и допускает пустые начальные или конечные текстовые строки.
LinearLayout parent = //get parent layout
String input = //get input
LayoutInflater inflater = this.getLayoutInflater();
int imageIndex = input.indexOf("<image tag begin");
int endIndex = -1; //find index one past the end of the image tag
while (imageIndex > -1){
TextView tv = inflater.inflate(R.layout.my_textview, null);
tv.setText(input.substring(0, imageIndex));
ImageView iv = inflater.inflate(R.layout.my_imageview, null);
String imgTag = input.substring(imageIndex,endIndex);
iv.setImageResource(-1); //or however you set your image from the tag
parent.addView(tv); parent.addView(iv);
input = input.substring(endIndex);
}
Это должно динамически создавать все изображения, которые вам нужны, и соответствующим образом анализировать ваши входные данные. если вы хотите сохранить исходные строки в БД, это, вероятно, хорошо.
Хранение текста в текстовых представлениях и изображений в изображениях сделает вашу жизнь намного проще, если вам придется устанавливать стили / изменять атрибуты для всего, что с этим связано. Братские представления, как правило, лучше, чем взламывание неверного вида информации / слишком большого количества информации в одном элементе Layout.
Кстати, я раздул пользовательские макеты XML для просмотра изображений и просмотра текста, на случай, если вы захотите предоставить некоторые пользовательские настройки стиля для всех их экземпляров. Вы можете просто сгенерировать обычные текстовые представления Android и изображения, если их достаточно.
Это было мое первоначальное решение, которое работает только с одним максимумом изображения.
String input = //whatever
boolean hasImage = //find image tag
int imageBegin = //find index where image tag begins
int imageEnd = //find index one past where image tag ends
String leadingText = input.substring(0,imageBegin);
String imageTag = input.substring(imageBegin, imageEnd);
String trailingText = input.substring(imageEnd, input.length());
((TextView)findViewById(R.id.leading_textview)).setText(leadingText);
if (hasImage){
//use imageTag to set content of Image View)
findViewById(R.id.image_view_id).setVisibility(View.VISIBLE);
((TextView)findViewById(R.id.trailing_textview)).setText(trailingText);
}
Если у вас может быть несколько встроенных изображений, вам придется
динамически создавать ImageViews и конечные TextViews, и добавлять их в
родитель рассматриваемого макета.