在通知图标中写入文本 - setLargeIcon()的大小不正确

时间:2015-01-29 16:20:22

标签: android android-notifications

我正在尝试设置温度以填充通知图标的整个方块。我已经尝试了各种设置和调整代码,这是我能得到的最好的。我首先在Android Assets Studio网站上创建了一些通知图标,并在相应的可绘制文件夹中将它们称为 ic_notification 。我创建的PNG是一个空白的PNG,其中3.4位于图中,如图所示,它是图片中的黑框。

我在桌面(10.1英寸大小)和三星Galaxy S之类的小手机上运行它,它的尺寸与下图相同。我想填满整个盒子而不仅仅是黑盒子,也可以覆盖浅蓝色的部分。有人可以解释为什么它不会填满整个屏幕,或者如何让它填满整个屏幕?

Notification Icon

我使用的代码如下,部分[4] 是从数组中获取的温度,是华氏度或摄氏度符号,具体取决于用户选择的内容在设置中。创建drawable后,在生成通知 .setLargeIcon(drawableToBitmap(iconDrawable))时,图标将被设置。

        BitmapDrawable iconDrawable = writeOnDrawable(R.drawable.ic_notification, parts[4] + degrees);
        public BitmapDrawable writeOnDrawable(int drawableId, String text) {

        Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(),
                drawableId).copy(Bitmap.Config.ARGB_8888, true);

        Paint paint = new Paint();
        paint.setStyle(Style.FILL);
        paint.setColor(Color.WHITE);
        paint.setTextSize(bm.getWidth() / 3);
        paint.setTextAlign(Align.CENTER);
        Canvas canvas = new Canvas(bm);
        //Log.e("log_etag", "Drawable Text " + text);
        //Log.e("log_etag", "getWidth bitMap " + bm.getWidth());
        //Log.e("log_etag", "Text Width " + text.length());

        Rect bounds = new Rect();
        float x = bm.getHeight() / 2, y = bm.getWidth() / 2;
        // get text lenght
        paint.getTextBounds(text, 0, text.length(), bounds); 
        // canvas.drawLine(0, y, canvas.getWidth(), y, paint); // Included
        // to show vertical alignment
        // canvas.drawLine(x, 0, x, canvas.getHeight(), paint); // Included
        // to show horizontal alignment
        // draw text
        canvas.drawText(text, x, y + bounds.height() * 0.5f, paint); 

        return new BitmapDrawable(mContext.getResources(), bm);

    }

我使用以下内容转换为位图

    public Bitmap drawableToBitmap(Drawable drawable) {
        if (drawable instanceof BitmapDrawable) {
            return ((BitmapDrawable) drawable).getBitmap();
        }

        Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
        drawable.draw(canvas);

        return bitmap;
    }

1 个答案:

答案 0 :(得分:0)

如果我没错,那么在将drawable转换为位图时会出现问题。对createBitmap的调用是将位图的大小定义为等于drawable的当前大小,但这不正确。如果drawable太小或太大,它将无法完全适合视图。

sdk中有一些特定的维度,它们确切地定义了通知位图图标应该有多大。所以试试这样:

int width = (int) getResources().getDimension(android.R.dimen.notification_large_icon_width);
int height = (int) getResources().getDimension(android.R.dimen.notification_large_icon_height);
Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);