群1 QQ:414801661已经加满,群2(未满)QQ:200241499
很多人刚刚接触电视TV都会问,电视分辨率和手机分辨率有何异同?其实,我想说没有啥区别!可能只有一些事项需要注意!
在项目开发中,同一个布局的不同电视盒子或者智能电视会显示出不同效果,QA和产品基本会疯,所以每次都会在适配上花费很多时间。现在电视分辨率相对手机还是比较少,但是比较奇葩(1440X800),例如480P,720P,1080P,2K,4K等等,关键密度和手机很不一样,很有可能不同厂家,但是相同分辨率的电视的密度会不同。我遇到奇葩电视LG,所有电视都显示没有问题,用LG电视结果布局有细微错位,让我们完美主义怎么活!强迫症改改!!!
需要强调推荐用dp,用dp,用dp,重要事情说三遍!(我个人真的很讨厌用px,原因适配上的后患无穷)
关于dp,px,ppi等等 网上文章有如繁星,我就发扬拿来主义,自己做个备份
1 .PX (pixel)
和美术沟通御用词汇,详情问PS软件或者你们美术妹妹,哈哈!它的中文名字叫 像素。
2.DIP(Density independent pixel)
这是我的最爱,唯一需要记住的
公式:pixel = dip*density;
private int convertDpToPixel(int dp) {
DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
return (int)(dp*displayMetrics.density);
}
private int convertPixelToDp(int pixel) {
DisplayMetrics displayMetrics = mContext.getResources().getDisplayMetrics();
return (int)(pixel/displayMetrics.density);
}
3.PPI (Pixels per inch)
这个感觉逼格比较高,各种高端产品拿来吹嘘的。中文意思,就是图像的采样率,每英寸的像素点,作用算屏幕的物理尺寸。
private void getScreenSizeOfDevice() {
Point point = new Point();
getWindowManager().getDefaultDisplay().getRealSize(point);
DisplayMetrics dm = getResources().getDisplayMetrics();
double x = Math.pow(point.x/ dm.xdpi, 2);
double y = Math.pow(point.y / dm.ydpi, 2);
double screenInches = Math.sqrt(x + y);
Log.d(TAG, "Screen inches : " + screenInches);
}
Android项目工程基础知识介绍:
三种主要的尺寸:大,正常,小;
三种不同的密度:高(hdpi),中(mdpi)和低(ldpi)。
在布局中,程序可以根据各种尺寸的屏幕提供不同资源(位图),自动载入对应的尺寸和密度所需要的资源。
下面列出不用分辨率下的密度值,仅供参考。
DENSITY_LOW = 120
DENSITY_MEDIUM = 160 //默认值
DENSITY_TV = 213 //TV专用
DENSITY_HIGH = 240
DENSITY_XHIGH = 320
DENSITY_400 = 400
DENSITY_XXHIGH = 480
DENSITY_XXXHIGH = 640
获取密度方法如下:
private void getDensity() {
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
Log.d(TAG,"Density is "+displayMetrics.density+" densityDpi is "+displayMetrics.densityDpi+" height: "+displayMetrics.heightPixels+
" width: "+displayMetrics.widthPixels);
}
小屏幕
·QVGA(240×320),2.6~3.0寸
普通屏幕
·WQVGA(240×400),3.2~3.5寸
·FWQVGA(240×432),3.5~3.8寸
·HVGA(320×480),3.0~3.5寸
·WVGA(480×800),3.3~4.0寸
·FWVGA(480×854),3.5~4.0寸
大屏幕 (手机)
·WVGA(480×800),4.8~5.5寸
·FWVGA(480×854),5.0~5.8寸
电视属于超大屏幕
常用电视(Android TV),32寸~70寸
下面电视上推荐两种方案:
第一种方案纯代码写,每次获取当前设备宽高,进行数学计算机,其他控件显示大小,电视相对页面逻辑较少,所以工作量还不是很大。
private void getDisplayInfomation() {
Point point = new Point();
getWindowManager().getDefaultDisplay().getRealSize(point);
Log.d(TAG,"the screen real size is "+point.toString());
}
第二种方案dimens适配,这种是相对轻松,适用率高,一次配好,万年可用,缺点偶尔遇到奇葩非主流的电视,布局错位需要单独调试。
必须要在androidmainfest中进行如下代码的配置:
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
工程目录如下:
我个人觉得目前比较好用的方案。
第三种 代码和xml 混用,因地制宜,乃大乘手段,战斗力极强,根据你项目具体情况具体分析,不在复述。