android 屏幕最小宽度_AndroidTV屏幕适配-smallestWidth(最小宽度) 限定符

背景

前几天接到一个需求,把项目上的原来的2k屏幕适配到4k屏幕。

我采用的是smallestWidth最小宽度限定符进行适配的我们项目的。

1,smallestWidth 限定符适配原理

系统都是根据限定符去寻找对应的 dimens.xml 文件。例如在最小宽度为 720dp 的设备上,系统会自动找到对应的 values-sw720dp 文件夹下的 dimens.xml 文件,smallestWidth 限定符适配是拿 dp 值来等比缩放而已。需要注意的是“最小宽度”是不区分方向的,即无论是宽度还是高度,哪一边小就认为哪一边是“最小宽度”。如下分别为最小宽度为 720dp 与最小宽度为 720dp 所对应的 dimens.xml 文件:下面这些资源文件和项目中的values同级目录下。

2,ScreenMatch插件生成values资源文件

在Android studio中搜索ScreenMatch安装上,重起Android studio

2.1 生成资源文件

在生成资源文件前,还有一项很重要的事,就是要在你想要生成的values资源的模块下的dimens.xml文件夹下先写好模版。

项目根目录右键选择SreenMatch

执行完成后项目中values同级目录下就会生成320,360,384,392.7272,400,410,411.4285,432,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365默认的资源文件夹,

注意  当项目中values文件夹定义的dp值不够用,需要在默认的values文件下-demins.xml新增,或者需要新增values-swxxxx,或略掉不需要适配的values-swxxxx,(新增或者删除如下图)都是需要右键选择SreenMatch重新执行上面三图的步骤。

2.2,dp值该怎么填写?

最小宽度该填多少,一般根据ui出的图来填写dp值,一般宽度显示多少 dp 就写多少 dp。有的小伙伴的用的工具可能不显示dp值,只有像素值,那也没关系 可以通过以下代码获取到设备的dp值,或者你不想用代码获取也可以在TV设备中设置里面查看具体密度值 以及像素值 然后换算成dp值。设计图标注多少 dp,布局中就写多少 dp ,非常方便!DisplayMetrics metric =new DisplayMetrics();

getWindowManager().getDefaultDisplay().getMetrics(metric);

// 屏幕宽度(像素)int width = metric.widthPixels;

// 屏幕高度(像素)int height = metric.heightPixels;

// 屏幕密度(1.0 / 1.5 / 2.0)float density = metric.density;

// 屏幕密度DPI(160 / 240 / 320)int densityDpi = metric.densityDpi;

int screenWidth = (int) (width / density);  // 屏幕宽度(dp)

int screenHeight = (int) (height / density);// 屏幕高度(dp)

2.3,切图应该放哪个 drawable 文件夹下,切多大?

举个例子:

我们项目4K的电视分辨率为3840 x2160 ,屏幕密度120dpi,通过120dpi,根据下表可以得知图片放在drawable-ldpi文件夹下,我们老得2k屏幕TV分辨率是1920*1080,屏幕密度值是240dpi,图片应该放在drawable-hdpi文件夹下面,所以要想同时适配2k以及4k屏两个文件夹下面都需要放置图片。在160dpi情况下,px与dp是1倍的关系,所以1px = 1dp

3、同时适配横竖屏

1,通过布局文件设置

右键单击‘res’文件夹  -> 'new'  ->  'Android resource directory'; 将 Directory name 填写 layout-land,Resource type 选择layout,这是建立了一个横屏的布局文件,同样的方式再建立一个layout-port资源文件夹,里面放一个竖屏的布局文件,名字要起一样的,这个很重要,然后再java文件中设setContentview就行了。这样屏幕切换的时候他们会被自动加载

2,代码中设置

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

int orientation = getResources().getConfiguration().orientation;

if (orientation == Configuration.ORIENTATION_LANDSCAPE) {

setContentView(R.layout.land);

} else if (orientation == Configuration.ORIENTATION_PORTRAIT) {

setContentView(R.layout.port);

}

}

5,使用步骤总结

1,以设计图最小宽度(单位为 dp)作为基准值,利用插件生成所有设备对应的 dimens.xml 文件

2,根据设计图标注,标注多少 dp,布局中就写多少dp,格式为@dimen/dp_XX。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 组合索引

MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有很多人还不是十分的了解,下面就为您分析两者的主要区别,供您参考学习。 为了形象地对比两者,再建一个表: CREATE TABLE myInde…

cmake使用总结(转)---工程主目录CMakeList文件编写

在linux 下进行开发很多人选择编写makefile 文件进行项目环境搭建,而makefile 文件依赖关系复杂,工作量很大,搞的人头很大。采用自动化的项目构建工具cmake 可以将程序员从复杂的makefile 文件中解脱出来。cmake 根据内置的规则和语法来自动生…

微信开发者工具 wxmi修改模版颜色_十款高效好用的在线网页工具,提升你的办公效率...

大家好, 我是阿毛,今天给大家推荐高效办公的10个在线网页工具,可以不用下载安装很多app,也不用在电脑上装很多软件。在线制作精彩视频操作非常简单,选择模板,上传照片然后点击制作等待完成就可以了&#xf…

三星ml1660拆机图解_三星s6拆机图解介绍

三星s6拆机图解介绍三星s6怎么拆机?不管你是手机维修者还是狂热的手机玩家,相信对您手中的三星s6内部构造和组装步骤应该都是非常有兴趣的吧?今天绿茶通过Fixit发布的三星s6拆机教程来和大家一起分享一下三星s6拆机步骤,从三星s6的内部构造一起来了解一…

Ajax请求利用jsonp实现跨域

跨域: js有一个同源限制,简单说来源不一样的话就无法相互间交互.那么怎么算来源不一样呢, 举个例子:浏览器访问-->服务器A--->得到页面A---页面A中的js脚本只能访问服务器A的资源(相同域名和端口,此外域名与对应的ip也算不同源,要么都域名,要么都ip). 以上就是js的跨域问…

[转]使用Navicat for Oracle工具连接oracle的

使用Navicat for Oracle工具连接oracle的 这是一款oracle的客户端的图形化管理和开发工具,对于许多的数据库都有支持。之前用过 Navicat for sqlserver,感觉很好用,所以下载了Oracle版的用。上网查看了一下这个工具可以用于任何版本 8i 或以上的 Oracle …

微信小程序基于第三方插件微信同声传译,以及一些问题解决办法

使用之前首先得在微信微信小程序后台添加插件,获取插件的appid 名称 使用时在app.json文件添加插件配置 1 plugins: { 2 WechatSI: { 3 version: 0.1.0, 4 provider: wx069ba97219f66d99 5 } 6 } 其次就是在使用的页面进行调用 在index.js外…

TF卡里删掉文件后内存没变大_内存卡损坏怎么修复?数据恢复方法教程

内存卡损坏怎么修复?内存卡又叫SD卡,是一种很轻便小巧的便携存储装置,往往内置于各种便携媒体设备内部。内存卡本身具有坚固、抗冲击等外部特性和读写快、空间大等内部特性,但是内存卡因为每天都要读写大量数据很容易从内部发生损…

apollo持久化sentinel_Spring Cloud Alibaba基础教程:Sentinel使用Apollo存储规则

上一篇我们介绍了如何通过Nacos的配置功能来存储限流规则。Apollo是国内用户非常多的配置中心,所以,今天我们继续说说Spring Cloud Alibaba Sentinel中如何将流控规则存储在Apollo中。使用Apollo存储限流规则Sentinel自身就支持了多种不同的数据源来持久…

Lintcode: Unique Paths

C dp 递推式&#xff1a;dp[i][j] dp[i-1][j] dp[i][j-1] 初值&#xff1a;dp[i][j] 1&#xff0c;i0 or j0 空间优化&#xff1a;省掉一维 1 class Solution {2 public:3 /**4 * param n, m: positive integer (1 < n ,m < 100)5 * return an integer6…

idea 如何隐藏/展示不想看到的文件

隐藏&#xff1a;在 Ignore files and folders中添加想要过滤的文件或文件夹名称 展示隐藏文件&#xff1a; 在过滤列表中删除掉文件或者文件夹就好了 转载于:https://www.cnblogs.com/mengjianzhou/p/6177897.html

BZOJ2286: [Sdoi2011]消耗战(虚树)

BZOJ2286: [Sdoi2011]消耗战 Time Limit: 20 Sec   Memory Limit: 512 MB Description 在一场战争中&#xff0c;战场由n个岛屿和n-1个桥梁组成&#xff0c;保证每两个岛屿间有且仅有一条路径可达。现在&#xff0c;我军已经侦查到敌军的总部在编号为1的岛屿&#xff0c;而且…

Java基础知识:Java实现Map集合二级联动4

comboBox.setModel(new DefaultComboBoxModel(getProvince())); // 添加省份信息 final JLabel label new JLabel(); label.setText("省/直辖市"); label.setBounds(155, 30, 66, 18); panel.add(label); final JLabel label_1 new JLabel(); label_1.setText(&quo…

linux QT 结束当前进程_Qt编写控件属性设计器7-串口采集

一、前言数据源是组态软件的核心灵魂&#xff0c;少了数据源&#xff0c;组态就是个花架子没卵用&#xff0c;一般数据源有三种方式获取&#xff0c;串口、网络、数据库&#xff0c;至于数据规则是什么&#xff0c;这个用户自己指定&#xff0c;本设计器全部采用第一个字节作为…

magento2邮件调试方法

order mail 直接打印到页面上 位置 vendor\magento\module-sales\Model\Order\Email\Sender.php Magento\Sales\Model\Order\Email\Sender::prepareTemplate() 添加代码 $objectManager \Magento\Framework\App\ObjectManager::getInstance(); $templateFactory $objectManag…

python多进程怎么样_Python执行多进程任务的方法

Python的多进程可以借助from multiprocessing import Pool来实现。简而言之分为这样几步&#xff1a;导入包from multiprocessing import Pool编写任务函数。def 任务函数(参数)实例化进程池并设置进程数。poolPool(欲设置的进程数)开始布置任务&#xff0c;把多个任务添加进多…

JAVA多线程之Synchronize 关键字原理

image众所周知 Synchronize 关键字是解决并发问题常用解决方案&#xff0c;有以下三种使用方式: 同步普通方法&#xff0c;锁的是当前对象。同步静态方法&#xff0c;锁的是当前 Class 对象。同步块&#xff0c;锁的是 {} 中的对象。实现原理&#xff1a;JVM 是通过进入、退出对…

iOS-数据持久化-第三方框架FMDB的使用

FMDB简单介绍 一、简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象&#xff0c;省去了很多麻烦、冗余的C语言代码 对比苹果自带的Core Data框架&#xff0c;更加轻量级和灵活 提供了多线程安全…

电脑word文档打不开怎么办_word怎么转pdf?两个值得学习的高效转换法

word怎么转pdf&#xff1f;两个值得学习的高效转换法word怎么转pdf&#xff1f;pdf格式是我们经常能够使用到的格式&#xff0c;因为pdf格式在传递的过程中能更好地避免文件出现乱码打不开或误触导致文件被修改的情况。那如果想要把word文件转换成pdf格式以避免阅读word时文件被…

sql server常用函数、常用语句

一、常用函数 1.字符串函数 &#xff1a; charindex(:,abc:123) --寻找一个字符在一段字符串中起始的位置 len(zhangsan) --获取一段字符串的长度 left(Ly,君子之耀,2) --从一段字符串左边返回指定长度的字符 right(char_expr,int_expr) --返回字符串右边int_expr个字符 …