3

我想要的输出:

带有自定义字体的小部件(主屏幕小部件)上的文本

我的问题:

  • 不能在小部件的 textview 上使用自定义字体(因为 TextView 不能在小部件中直接访问,我们必须使用远程视图来使用它们。)

所以我想使用imageview并使用画布在位图上绘制文本,然后在imageview上设置这个位图。到目前为止,一切正常,但只有两件事。

我不知道,

  • 如何使我的文本在中心垂直和水平设置?(垂直和水平意味着,垂直和水平都在中心)

  • 如何使我的文本填满位图的整个空间?

我正在使用以下代码在小部件上显示一些文本。

Bitmap bitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

Paint paint = new Paint();

paint.setColor(Color.YELLOW);
canvas.drawPaint(paint);

paint.setColor(Color.GREEN);
paint.setStyle(Style.FILL);

canvas.drawText("Test", 50, 50, paint);

以下是输出。 在此处输入图像描述

4

3 回答 3

1

1- 在小部件的 textview 上设置字体运行时

I dont know that either

2-将文本设置为居中并填充容器

Please see the following code:

 float size = 1.0f;

 Bitmap bitmap = Bitmap.createBitmap(200, 200, Config.ARGB_8888);

 Canvas canvas = new Canvas(bitmap);

 Paint paint = new Paint();

 paint.setColor(Color.YELLOW);
 canvas.drawPaint(paint);

 paint.setColor(Color.GREEN);
 paint.setStyle(Style.FILL);

 Rect rect = new Rect();
 paint.getTextBounds("Test", 0, 4, rect);

 float width = 1.0f;

 while (width<200 && rect.height()<200)
 {
  size++;
  paint.setTextSize(size);

  width = paint.measureText("Test");
  paint.getTextBounds("Test", 0, 4, rect);

 }

 size--;
 paint.setTextSize(size);

 canvas.drawText("Test", 100-width/2, 100+rect.height()/2, paint);

我试图附上屏幕截图,但它不允许我添加,因为我是新用户。(菜鸟:P)

谢谢,

于 2012-05-10T11:12:13.380 回答
0
  1. 无法在小部件的 textview 上使用自定义字体

    TextView tv=(TextView)findViewById(R.id.custom);
    Typeface face=Typeface.createFromAsset(getAssets(),"fonts/Verdana.ttf");
    tv.setTypeface(face);
    

    如果您想在画布中使用相同的内容,则将面设置为绘制您使用的 obj。

  2. 如何使我的文本在中心垂直和水平设置?

  3. 在画布中作为您的绘图文本通过paint obj。然后你可以设置paint obj

    mPaint.setTextAlign(Align.CENTER);
    

或者您可以向左或向右放置。您不能垂直或水平设置,因为您绘制文本,因此您可以垂直或水平绘制所需的内容。

例如,您需要绘制文本 SAM

  1. 水平表示 canvas.drawText("SAM", 50, 50, paint);

  2. 真正的意思

           canvas.drawText("S", 50, 50, paint);
           canvas.drawText("A", 50, 51, paint);
           canvas.drawText("M", 50, 52, paint);
    

    注意:那么您可能会认为 mPaint.setTextAlign(Align.CENTER) 是右还是左。例如,如果您的宽度为 100 并且您开始从 20 像素到 50 像素进行书写,则意味着它会尝试将其保持在 20 到 50 像素的中心。不在中心宽度为 100 像素。

  3. 如何使我的文本填满位图的整个空间?

你不会在这里找到任何包装内容,因为在 Canvas 中我们必须自己。

所以首先检查你有多少空间并填充给定的 x 和 y 值,并预先更改文本大小。

于 2012-05-10T09:30:33.893 回答
0

你好为什么你不能在 TextView 上使用自定义字体:我认为你可以只继承 TextView 并添加三个默认文本视图构造函数

  if (!isInEditMode()) {
              Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/ds_digib.ttf");
              setTypeface(tf);
    }

使您的文本垂直和水平设置

看到这个链接

在此处输入图像描述

希望这可以帮助您解决问题

于 2012-05-10T09:31:02.600 回答