Ответ 1
Я решил эту проблему, используя класс singltone. Я даю полный код, чтобы он мог помочь другим.
определить это в xml
xmlns: lht = "http://schemas.android.com/apk/res/com.lht" android: id = "@+ id/basicLayout"
------------------------ Создайте класс MidColorTextView в пакете com.xyz.util ------------ ------------------------- Открытый класс MidColorTextView расширяет TextView {
private CharSequence text;
private String token;
private Context context;
private String colorSpan;
private int colorCode;
public MidColorTextView( Context context , AttributeSet attrs )
{
super(context, attrs);
this.context = context;
for(int i = 0; i < attrs.getAttributeCount(); i ++ )
{
// Log.i(TAG, attrs.getAttributeName(i));
/*
* Read value of custom attributes
*/
this.text = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.xyz", "text");
this.token = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.xyz", "token");
this.colorSpan = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.xyz", "colorSpan");
// Log.i("TAG", "token " + token);
// Log.i("TAG", "text " + text);
// Log.i("TAG", "colorSpan " + colorSpan);
}
init();
}
private void init ()
{
if(text.charAt(0) == '@')
{
String tempText = (String) text.subSequence(1, text.length());
this.text = Html.fromHtml(getResources().getString(Integer.parseInt(tempText)));
}
if(token.charAt(0) == '@')
{
String tempText = (String) token.subSequence(1, token.length());
this.token = getResources().getString(Integer.parseInt(tempText));
}
if(colorSpan.charAt(0) == '@')
{
String tempText = (String) colorSpan.subSequence(1, colorSpan.length());
this.colorSpan = getResources().getString(Integer.parseInt(tempText));
}
setColorCode(Color.parseColor(colorSpan));
CharSequence textWitoutToken = null;
String tempString = text.toString();
// ---------checking whether text containg token or not.
if(tempString.contains(token))
{
textWitoutToken = setSpanBetweenTokens(text, token, new ForegroundColorSpan(colorCode));
}
else
{
textWitoutToken = text;
}
textContent = null;
setText(textWitoutToken);
setTypeface(FontManager.getInstance(context).getTypefaceArial ());
}
public void setText ( CharSequence text , String token , int color )
{
setText(setSpanBetweenTokens(text, token, new ForegroundColorSpan(color)));
setTypeface(FontManager.getInstance(context).getTypefaceArial ());
}
public int getColorCode ()
{
return colorCode;
}
public void setColorCode ( int colorCode )
{
this.colorCode = colorCode;
}
private CharSequence textContent;
public CharSequence setSpanBetweenTokens ( CharSequence text , String token , CharacterStyle... cs )
{
// Start and end refer to the points where the span will apply
int tokenLen = token.length();
int start = text.toString().indexOf(token) + tokenLen;
int end = text.toString().indexOf(token, start);
if(start > - 1 && end > - 1)
{
// Copy the spannable string to a mutable spannable string
SpannableStringBuilder ssb = new SpannableStringBuilder(text);
for(CharacterStyle c : cs)
{
ssb.setSpan(c, start, end, 0);
}
// Delete the tokens before and after the span
ssb.delete(end, end + tokenLen);
ssb.delete(start - tokenLen, start);
text = ssb;
textContent = ssb;
String tempString = textContent.toString();
if(tempString.contains(token))
{
setSpanBetweenTokens(textContent, token, new ForegroundColorSpan(colorCode));
}
}
return textContent;
}
} ----------------------------- создать еще один класс FontManager
открытый класс FontManager { частный Typeface typefaceArial; частный контекстный контекст;
private static FontManager instance = null;
private FontManager(Context context) {
this.context = context;
this.typefaceArial= Typeface.createFromAsset(context.getAssets(), "arial.ttf");
}
public synchronized static FontManager getInstance(Context context) {
if(instance == null) {
instance = new FontManager(context);
}
return instance;
}
public Typeface getTypefaceArial ()
{
return typefaceArial;
}
}
//-------------------------
Это решит все проблемы, setSpanBetweenTokens используется для цветного текста между конкретными токенами. // ------------------ Вот строковый файл. Встреча <br> <br> PAST <br> Позвольте сотруднику дать вам их мнение об их положительном прогресс за прошедший период, сосредоточьте их на этом с открытым вопросы, такие как: <br> <i> #\ "Каков был ваш важный вклад в прошлом 6 месяцев? \" # </i> <br> <i> # \ "Что вы узнали о своей роли? \" # </i> <br> <i> #\ "Каков был ваш важный успех? \" # </i> <br> Нельзя использовать предыдущие ошибки, Не сосредотачивайтесь на плохой работе - вы не можете изменить это, зарезервируйте эти обсуждения в будущем разработка - см. ниже <br> <br> ПРИСУТСТВУЕТ <br> Используя открытые вопросы, помогите персоналу идентифицировать их истинные сильные стороны, способности, атрибуты, навыки и отношения. Создать всеобъемлющую картину их как стратегического вкладчика и ресурс. <br> Каковы ваши навыки и какой уровень? <br> <i> #\ "Что вы добавили как за последние месяцы? \" # </i> <br> <i> # \ "Что вы нашли наиболее полезные личные атрибуты в ваша роль? \" # </i> <br> <br> FUTURE <br> Будущее - это период, когда изменения в возможности и производительность может быть достигнута. <br> Это обсуждение - это то, где ваши люди могут понять - с вашей помощь - какая разработка им необходима для достижения вашей эффективности стандартов и их карьерных целей. Он начинается с понимания их карьерные цели, поэтому.... <br> <i> #\ "Каковы ваши цели? \" # </i> <br> <i> #\ "Что вам понадобится разработка? \" # </i> <br> <i> #\ "Вы видели за последние месяцы, что вам может потребоваться больше навыков в этих области.......................... что нам делать что? \" # </i> <br> <br> Наконец: Согласуйте конкретный план развития, который включает обучение/опыт в областях, где требуется больше навыков. Фиксация дат в дневнике <br> <br> Менеджер\роль является одним из Mentor и Guide; не Судья и Жюри