【问题标题】:Writing of text in notification icon - setLargeIcon() incorrect size在通知图标中写入文本 - setLargeIcon() 大小不正确
【发布时间】:2015-03-21 03:47:14
【问题描述】:

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

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

我使用的代码如下,parts[4] 是从数组中获取的温度,degrees 是华氏或摄氏符号,具体取决于用户选择的内容在设置中。在创建可绘制对象后构建通知 .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;
    }

【问题讨论】:

  • 前段时间我遇到了Android中的小图标和大图标被弄乱的问题。我不确定你是否也是这种情况,但你可以考虑这个帖子:stackoverflow.com/a/19375412/1108032 请注意,PS 中提到了图标搞砸了,不是帖子的主题
  • 很有趣,但这似乎对我的事业没有帮助。我想我必须摆弄可绘制设置。

标签: android android-notifications


【解决方案1】:

如果我没记错的话,问题是在将可绘制对象转换为位图时出现的。对 createBitmap 的调用将位图的大小定义为等于可绘制对象的当前大小,但这是不正确的。如果 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);

【讨论】:

  • 我试过了,它仍然做同样的事情,但是,它只适用于三星 Galaxy S4,我没有另一个,但在我的朋友摩托罗拉 G 上它涵盖了整个图标。所以我想知道这是否与三星的 Touch Wiz 品牌手机有关。
  • 不幸的是三星在Android系统中修改了太多他们根本不应该修改的东西。我在三星设备上遇到了很多问题,在其他方面也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2020-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多