智能电视TV分辨率处理方案--第1问

群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 混用,因地制宜,乃大乘手段,战斗力极强,根据你项目具体情况具体分析,不在复述。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值