Я создаю виджет, который отображает текст. По виджетам я подразумеваю вид, который лежит на рабочем столе.рендеринг TextView в растровом виде для виджета android
Проблема в том, что я хочу изменить шрифт текста во время выполнения. Там будет несколько TextView Я хотел бы, во время выполнения, чтобы установить первый, как жирный, второй синий и курсивом, например, и т.д.
Я пришел с этим:
TextView tv = new TextView(context);
tv.setText(stringToDisplay);
tv.setTextColor(0xa00050ff); // example
tv.setTextSize(30); // example
Bitmap b = loadBitmapFromView(tv);
updateViews.setImageViewBitmap(R.id.id_of_the_imageview, b);
с
private static Bitmap loadBitmapFromView(View v)
{
Bitmap b = Bitmap.createBitmap(v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getLayoutParams().width, v.getLayoutParams().height);
v.draw(c);
return b;
}
но это не будет работать (NullPointerException на первой линии LoadBitmap), пока я не заменить v.getLayoutParams().width, v.getLayoutParams().height
фиксированными размерами, как 250, 50
Bitmap b = Bitmap.createBitmap(250, 50, Bitmap.Config.ARGB_8888);
// ...
v.layout(0, 0, 250, 50);
Но это не является хорошим решением ...
поэтому я попытался это:
LayoutInflater li = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = li.inflate(R.layout.widget_text, null);
TextView tv = (TextView) row.findViewById(R.id.id_of_the_textview);
widget_text
быть макет, похожий на отображаемом один, но с TextViews вместо ImageViews, в надежде получить размер информация из него ..
, но это не работает, и я получаю это исключение:
01-02 17:35:06.001: ERROR/AndroidRuntime(11025): Caused by: java.lang.IllegalArgumentException: width and height must be > 0
на позвоните по телефону Bitmap.createBitmap()
так, кто-то может указать мне в правильном направлении?
это вариант я проглядел, но как бы вы установить размер? У меня не может быть разных текстовых просмотров для разных размеров, что бы сделать много текстовых просмотров, учитывая, что у меня есть 4 из них ... для 20 размеров, которые сделают 320 текстовых просмотров (полужирный/курсив/boldItalic/normal) ... даже считая для семейства шрифтов и таких вещей. – foke
в таком случае, идите в крайнем случае! Это было бы возможно только в том случае, если это всего лишь одно сообщение с несколькими стилями, конечно. BTW, если вы разрабатываете только последние версии андроида, вы можете динамически добавлять и удалять представления в RemoteViews, что может сделать этот вариант еще раз. Думаю, вы также потеряете множитель 4. (и 80 неиспользуемых записей макета на самом деле не потребляют ресурсы, отличные от памяти) – mvds
, но последнее средство не будет работать: '(:' ( – foke