Android 屏幕适配攻略(六)设置通知样图标与启动图标适配

Android 屏幕适配攻略(六)设置通知样图标与启动图标适配


1 Android中资源文件中的图片加载分析

Android中对屏幕的像素适配处理分类

屏幕密度 对应的标签 对应的像素
120dip ldpi 1dp= 0.75px
160dip mdpi 1dp= 1px
240dip hdpi 1dp= 1.5px
320dip xhdpi 1dp= 2px
480dip xxhdpi 1dp= 3px
640dip xxxhdpi 1dp= 4px

通过计算,假如计算出来的屏幕密度为 150,安卓系统会进行判断,150 在 120dip 与 160dip 之间,那么系统会使用 160dip为 基数来进行尺寸的计算 《在Android 屏幕适配攻略(一)到 (五)中已详细分析》

那么在对应的加载资源目录(res)下的图片时,我们已知对应的存放图片的目录可以有

在drawable目录下

屏幕密度 对应的标签 图片资源目录
120dip ldpi drawable-ldpi
160dip mdpi drawable或者drawable-mdpi
240dip hdpi drawable-hdpi
320dip xhdpi drawable-xhdpi
480dip xxhdpi drawable-xxhdpi
640dip xxxhdpi drawable-xxxhdpi

或者是在mipmap目录下

屏幕密度 对应的标签 图片资源目录
120dip ldpi mipmap-ldpi
160dip mdpi mipmap或者mipmap-mdpi
240dip hdpi mipmap-hdpi
320dip xhdpi mipmap-xhdpi
480dip xxhdpi mipmap-xxhdpi
640dip xxxhdpi mipmap-xxxhdpi

Android 在加载资源文件中的图片时,会先去加载对应屏幕密度下的图片,例如是320的屏幕,就会优先去加载xhdpi目录下的图片,如果当前目录中没有,那么就会去查找其他目录中同名资源图片,如果没有则编辑报错®


2 通知栏加载的图标的适配大小

在开发中,时常会遇到启动图标不知应当设置为多大像素的为合适,而通知 加载的图标时常显示不全或者过于太小,总之影响效率,所以结合上述的适配分析,与查阅谷歌官方文档中的建议,得出以下结论

屏幕密度 对应的图片大小 图片资源目录
120dip 36px * 36px mipmap-ldpi
160dip(基准) 48px * 48px mipmap或者mipmap-mdpi
240dip(1.5倍) 72px * 72px mipmap-hdpi
320dip (2倍) 96px * 96px mipmap-xhdpi
480dip (3倍) 144px * 144px mipmap-xxhdpi
640dip (4倍) 192px * 192px mipmap-xxxhdpi



按照上述的比例设置下来,基本上解决了目前所测试的近20多款手机中启动图标与通知栏图标中显示样式的适配问题




发布了344 篇原创文章 · 获赞 173 · 访问量 44万+
展开阅读全文

android 5.0版本后Notification通知栏的大小图标问题

10-19

要求系统版本在5.0之后,而且程序的targetSDK也是大于21,不修改这两个地方的情况下把图里红圈的地方去掉,我试过用NotificationCompat,没有用和Notification的情况是一样的 先上代码 ``` package com.example.notificationtest; import android.app.Activity; import android.app.Notification; import android.app.Notification.Builder; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.graphics.BitmapFactory; import android.os.Bundle; import android.support.v4.app.NotificationCompat; public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); showNotification2(); showNotification(); showNotification3(); } protected void showNotification2() { NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); Builder builder = new Notification.Builder(this); PendingIntent contentIndent = PendingIntent.getActivity(MainActivity.this, 0, new Intent(MainActivity.this,MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT); builder.setContentIntent(contentIndent) .setSmallIcon(R.drawable.icon_notification)//设置状态栏里面的图标(小图标)                     .setLargeIcon(BitmapFactory.decodeResource(res, R.drawable.i5))//下拉下拉列表里面的图标(大图标)        .setTicker("this is bitch!") //设置状态栏的显示的信息 .setWhen(System.currentTimeMillis())//设置时间发生时间 .setAutoCancel(true)//设置可以清除 .setContentTitle("This is ContentTitle")//设置下拉列表里的标题 .setContentText("this is ContentText");//设置上下文内容 Notification notification = builder.getNotification(); //加i是为了显示多条Notification notificationManager.notify(12121,notification); } private void showNotification(){ NotificationCompat.Builder buider = new android.support.v4.app.NotificationCompat.Builder(this) .setContentTitle("123") .setContentText("456") .setSmallIcon(R.drawable.icon_notification) .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.icon_notification)) .setAutoCancel(true);//设置可以清除 NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(12122,buider.getNotification()); } private void showNotification3(){ Notification.Builder builder = new Notification.Builder(this); builder.setContentTitle("横幅通知"); builder.setContentText("这是一个横幅通知"); builder.setDefaults(NotificationCompat.DEFAULT_ALL); builder.setSmallIcon(R.drawable.icon_notification); builder.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.icon_notification)); Intent intent = new Intent(this,MainActivity.class); PendingIntent pIntent = PendingIntent.getActivity(this,1,intent,0); builder.setContentIntent(pIntent); builder.setFullScreenIntent(pIntent,true); builder.setAutoCancel(true); Notification notification = builder.build(); NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE); notificationManager.notify(12113,notification); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201610/20/1476902914_254026.png) ![图片说明](https://img-ask.csdn.net/upload/201610/20/1476902922_492739.png) 问答

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie

分享到微信朋友圈

×

扫一扫,手机浏览