У меня есть требование для создания textView, который содержит что-то вроде: «Заголовок [x]», за которым следует «некоторый текст», за которым следует «\ n», за которым следует «Название [y]», а затем «больше текста» и т. Д. даваяМогу ли я «хранить» spannable строки в массиве?
Название [х] какой-то текст
Название [у] больше текста
Мне нужно Название быть смелыми и иметь разный цвет для каждого заголовка. У меня есть 11 названий в общей сложности и до 30 текстовых строк на выбор, и любой заголовок может содержать любую текстовую строку. В каждом цикле у меня будет от 1 до 6 титров в моем окончательном результате. У меня нет проблем с построением textView с «известными» значениями x и y, но в реальной жизни я не буду знать значения до тех пор, пока не приступлю к созданию растянутой строки. Я не хочу строить все возможные варианты строки (более 300). Я попытался создать все «заголовок» и добавить их к своему «результату», когда создаю их, и он работает нормально, но если я их создам и добавлю в один оператор в конце, я потеряю полужирный и цвет атрибуты.
Мой main.xml имеет TextView с идентификатором color_test.
package uk.cmj.color;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.SpannableStringBuilder;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.view.View;
import android.widget.TextView;
import android.widget.TextView.BufferType;
public class ColorActivity extends Activity {
/** Called when the activity is first created. */
private static int titleIndex = 0;
private final String[] titles = {"Title A", "Title B", "Title C"};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ---------------------------------------------
// THIS WORKS AND I SEE COLOR AND BOLD FOR TITLE
// ---------------------------------------------
titleIndex = 1;
SpannableStringBuilder resultText = new SpannableStringBuilder();
String firstTitle = titles[titleIndex];
SpannableString firstTitleSpannable= new SpannableString(firstTitle);
firstTitleSpannable.setSpan(new ForegroundColorSpan(Color.rgb(155,79,25)), 0, firstTitle.length(), 0);
firstTitleSpannable.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, firstTitle.length(), 0);
resultText.append(firstTitleSpannable);
String body1 = " some text" + "\n";
SpannableString body1Spannable= new SpannableString(body1);
body1Spannable.setSpan(new ForegroundColorSpan(Color.BLACK), 0, body1.length(), 0);
resultText.append(body1Spannable);
titleIndex = 2;
String nextTitle = titles[titleIndex];
SpannableString nextTitleSpannable= new SpannableString(nextTitle);
nextTitleSpannable.setSpan(new ForegroundColorSpan(Color.rgb(155,79,25)), 0, nextTitle.length(), 0);
nextTitleSpannable.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, nextTitle.length(), 0);
resultText.append(nextTitleSpannable + "\n");
String body2 = " some different text" + "\n";
SpannableString body2Spannable= new SpannableString(body2);
body1Spannable.setSpan(new ForegroundColorSpan(Color.BLACK), 0, body1.length(), 0);
resultText.append(body2Spannable);
TextView color_test = (TextView) findViewById(R.id.color_test);
color_test.setText(resultText, BufferType.SPANNABLE);
// ------------------------------------------
// THIS DOESN'T WORK AS I LOSE COLOR AND BOLD
// ------------------------------------------
titleIndex = 1;
SpannableStringBuilder resultText = new SpannableStringBuilder();
String firstTitle = titles[titleIndex];
SpannableString firstTitleSpannable= new SpannableString(firstTitle);
firstTitleSpannable.setSpan(new ForegroundColorSpan(Color.rgb(155,79,25)), 0, firstTitle.length(), 0);
firstTitleSpannable.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, firstTitle.length(), 0);
String body1 = " some text" + "\n";
SpannableString body1Spannable= new SpannableString(body1);
body1Spannable.setSpan(new ForegroundColorSpan(Color.BLACK), 0, body1.length(), 0);
resultText.append(body1Spannable);
titleIndex = 2;
String nextTitle = titles[titleIndex];
SpannableString nextTitleSpannable= new SpannableString(nextTitle);
nextTitleSpannable.setSpan(new ForegroundColorSpan(Color.rgb(155,79,25)), 0, nextTitle.length(), 0);
nextTitleSpannable.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, nextTitle.length(), 0);
String body2 = " some different text" + "\n";
SpannableString body2Spannable= new SpannableString(body2);
body1Spannable.setSpan(new ForegroundColorSpan(Color.BLACK), 0, body1.length(), 0);
resultText.append(body2Spannable);
resultText.append(firstTitleSpannable
+ body1Spannable
+ nextTitleSpannable
+ body2Spannable);
TextView color_test = (TextView) findViewById(R.id.color_test);
color_test.setText(resultText, BufferType.SPANNABLE);
}
}
Благодарим за это. Я фактически решил свою проблему, создав массив с номерами RGB для каждой строки, что сделало эту работу. Я очень новичок в android/java, поэтому все решения полезны для меня. В настоящий момент его работа важнее, чем эффективная работа - в конце концов я доберусь до этого этапа! ArrayList теперь находится в моем списке предметов для расследования! –
Marvin