テキストを表示するウィジェットを作成しています。ウィジェットとは、デスクトップ上にある種類を意味します。アンドロイドウィジェットのビットマップにTextViewをレンダリングする
問題は、実行時にテキストのフォントを変更したいということです。
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;
}
で
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);
:私はこれを思い付いたなど、私は大胆として最初に設定し、実行時に、希望のいくつかのTextView、例えば青とイタリック秒、
があります
私は250、50
Bitmap b = Bitmap.createBitmap(250, 50, Bitmap.Config.ARGB_8888);
// ...
v.layout(0, 0, 250, 50);
01のような固定されたサイズによって
v.getLayoutParams().width, v.getLayoutParams().height
を交換するまでは習慣、(loadBitmapの最初の行にNullPointerExceptionが)動作
しかし、それは良い解決策ではありません...
ので、私はこれを試してみました:
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
は、表示された1つの代わりにImageViewsのTextViewsと同様のレイアウトであること、期待していくつかのサイズを取得しますそれのうち情報..
が、それは働いていないと、私はこの例外を取得:上
01-02 17:35:06.001: ERROR/AndroidRuntime(11025): Caused by: java.lang.IllegalArgumentException: width and height must be > 0
Bitmap.createBitmap()
への呼び出しので、誰かが正しい方向に私を指すことができますか?
を私が見落としオプションですが、どのようにサイズを設定することを?私はおそらく、私はそれらの4つを持っていると考えて、多くのtextviewsを作る異なるサイズのtextviewsを持つことはできません... 320のtextviews(太字/イタリック/太字イタリック/ノーマル)フォントファミリなどの数を数えます。その場合は – foke
、最後の手段に行ってください!これは、もちろん、いくつかのスタイルを持つメッセージが1つだけの場合にのみ実現可能です。最近のアンドロイド版のみを開発している場合は、ビューをRemoteViewに追加したり削除したりすることができます。あなたはまた私が思う4の倍数を失います。 (そして80未使用のレイアウトエントリは実際にはメモリ以外のリソースを消費しません) – mvds
最後の手段は動作しません: '(:'( – foke