android 屏幕适配问题

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。

 

首先:你需要在AndroidManifest.xml文件的<manifest>元素如下添加子元素

<supports-screens android:largeScreens="true"

      android:normalScreens="true"android:anyDensity="true"

      android:smallScreens="true"></supports-screens>

 

    名如其意,以上是为我们的屏幕设置多分辨率支持(更准确的说是适配大、中、小三种密度)。android:anyDensity="true" ,这一句对整个的屏幕都起着十分重要的作用,值为true,我们的应用程序当安装在不同密度的手机上时,程序会分别加载hdpi,mdpi,ldpi文件夹中的资源。

 相反,如果值设置为false,即使我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机,如果设置android:anyDensity="false",Android系统会将240 x 320(低密度)转换为320×480(中密度),这样的话,应用就会在小密度手机上加载mdpi文件中的资源。

 

2.细心的人会发现自android2.0开始之后drawable文件被三个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹所取代,有些编程人员为了让应用程序默认地加载某些图片,他们会特意地去在android2.0之后的应用程序中重新创建drawable文件夹,其实这样做完全没有必要,通过第一段的分析我们得知,android:anyDensity="false",则应用会将大小密度转变成中密度,从而去加载mdpi中的资源。这里同样,当android:anyDensity="false",则应用会去加载mdpi中的资源。

总结一下:

第一:android:anyDensity="true",系统会依据屏幕密度,自动去找对应的文件夹

第二:android:anyDensity="false",

(1)             如果drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源

(2)             如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源。

(3)             如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有对应的图片资源,那么系统会加载drawable-mdpi文件夹中的资源

 

3. 注意上图各种文件夹的不同表示。

drawable-hdpi 该图片即适用于横屏,也适用于竖屏

drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资源

drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源

 

3. 有时候会根据需要在代码中动态地设置某个值,比如地图,地图的pin和地图的地址提示框的相对偏移量在不同密度的手机上是不同的。这时候可以通过以下方法求出屏幕密度:

 

DisplayMetrics metric = newDisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);

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

 

然后可以在代码中为这几种密度分别设置偏移量

 

但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。

这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置

值得一提的是:

   <dimen name="bitmap_common_topoffset">40dp</dimen>

   <dimen name="bitmap_common_bottomoffset">-14dp</dimen>

这里的负数是完全起作用的,系统会认为它是一个负值


4.各大手机厂商对于Android操作系统都有或多或少的改动,当然这些改动会对我们应用程序产生某些影响

  比如:

  (1)系统源代码中连接music服务的aidl文件所在包名:com.android.music 

  (2)LG则可能将该aidl文件修改所在的包(例如修改为com.android.music.player),并且修改其中的文件内容(增加一个方法,或者减少几个方法,或者修改方法名称)那么我们的应用要想在LG的手机上发布,那么我们就必须改变所要连接的aidl文件,必须跟LG厂商修改的完全一致。

  

5. 国际化问题.

  有时候在xml中设置了相应的语言,但是为什么当我们更改语言之后,UI显示仍然不起作用?

  不要怀疑是系统出了问题,这与我们在代码中引用values/string.xml中字符串的方式有关。

   错误的方式:

   1. 声明全局变量private static String tempStr;

   2.在onCreate方法中对该变量赋值 tempStr =context.getString(R.string.test);

   3.在更新UI的方法(非onCreate方法)中引用该变量。textView.setText(tempStr);

   原因是由于,当修改本地语言时,onCreate不会再被执行一遍. 变量tempStr依然会使用页面刚启动时加载的默认英语。


   正确的方式:

  直接进行第三步:textView.setText(context.getString(R.string.test));


转:http://blog.sina.com.cn/s/blog_74c22b210100tn3o.html
开源,安卓自动缩放布局,解决屏幕适配问题 做过安卓开发的都知道,屏幕适配是一件非常困难的事情。 Google官方的解决方案:http://developer.android.com/guide/practices/screens_support.html 需要写多个layout文件以及dimens.xml,工作量大不说,维护也麻烦。 其实很多时候我们的需求很简单,就是要求不同的屏幕看上去效果一样就可以了。这样就需要我们布局的 阅读详情

相关推荐

Android嵌入广告源码demo

Android如何嵌入广告赚钱demo 包含了详细的说明步骤,以及需要注意的事项。 支持广告条,推送广告,积分墙等赚钱方式。 支持国内主流的平台如goapk,hiapk,appChina,91,机锋,木蚂蚁等平台渠道。 是广大Android开发者必备的资源,赚钱从现在开始。

Android屏幕密度(Density)和分辨率的解释

移动设备有大有小,那么如何适应不同屏幕呢,这给我们编程人员造成了很多困惑。我也是突然想到这些问题,然后去网上搜搜相关东西,整理如下。 首先,对下面这些长度单位必须了解。 Android中的长度单位详解(dp、sp、px、in、pt、mm) 看到有很多网友不太理解dp、sp和px的区别:现在这里介绍一下dp和sp。dp也就是dip。这个和sp基本类似。如果设置...

编程语言小筑 948

修改系统density、densityDpi适配

文章目录一、简述二、追根溯源三、实现3.1 定义Density用于对系统类值的修改3.2 在MainActivity中调用3.3 处理应用程序关于字体大小的监听3.4 如果多界面统一处理怎么办?3.4.1 BaseActivity3.4.2 监听应用程序的变化四、完整代码 一、简述 修改density(屏幕密度,若每英寸有160像素点,该值就为1)、scaleDensity(字体缩放比例),densityDpi(屏幕上每英寸有多少像素点,如160)的值,就是修改系统内部对于目标尺寸而言的像素密度。 二、追根溯源 每个控件的显示,dp、sp等最终都会转换成px为单位,原因在于android源码T

android 如何适配屏幕大小,ANDROID 如何适配屏幕之density

如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。首先:你需要在AndroidManifest.xml文件的元素如下添加子元素android:normalScreens=“true”android:anyDensity=“true”android:smallScreens=“true”>名如其意,以上是为我们的屏幕...

weixin_33350741的博客 650

Android实际分辨率(android:anyDensity="false"的情况下的获取方法)

android:anyDensity="true"的情况用以下方法即可获取 DisplayMetrics dm = MainActivity.getActivity().getResources().getDisplayMetrics(); int w_screen = dm.widthPixels;

哈里森 3848

android anydensity,webview 不能全屏 底部 有空白部

今天遇到一个 奇怪的问题:一个webview 上面直接 loadUrl ,竟然发现 webview下面 多出一块空白区域,如下图:百思不得其解。查了一些资料,也没找到方法。后来发现 在配置文件里面 有这么一句android:anyDensity="false"android:largeScreens="true"android:normalScreens="true"android:resize...

weixin_36254822的博客 645

android – 多屏幕适配相关

android – 多屏幕适配相关 作者: 曲天日期: 2011/10/27 1、基本概念 屏幕大小(screen size) – 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸)。android把屏幕分为以下4种:small,normal,large,extra large。 怎么判断? 屏幕密度(Screen Density) -  一块实际的屏幕区域有多少个像

jiangxinyu的专栏 2万+

安卓Android开发中的屏幕适配问题

原文链接:https://blog.csdn.net/ccit0519/article/details/77945954 1 为什...

timekeeper 643

【安卓学习之常见问题Android 屏幕适配

问题:  ● APP启动后的引导页的图片显示,会变形。  ● 如何不让他变形? █ 实验:  ● 手机的几部手机,查看下屏幕的分辨率,哇塞,竟然都是16:9的:     ● 但实际上并非如此,到【ZOL中关村在线】查下数据对比如下: 参数对比 型号名称 三星W789(电信版) 酷派7060 ...

任我飞的博客 705

Android--开源,安卓自动缩放布局,解决屏幕适配问题

做过安卓开发的都知道,屏幕适配是一件非常困难的事情。 Google官方的解决方案:screens_support 需要写多个layout文件以及dimens.xml,工作量大不说,维护也麻烦。 其实很多时候我们的需求很简单,就是要求不同的屏幕看上去效果一样就可以了。这样就需要我们布局的时候采用百分比来定位。 说到百分比,我们第一时间想到的是layout_weight,但是layout_w

Navan 1134

安卓屏幕适配问题

最近项目上线,闲来无事,说下自己在学习过程中的屏幕适配问题 首先,安卓的屏幕碎片化的前提需要我们针对安卓手机要做很多适配问题 1.图片的处理,我们应该创建对应的资源文件进行适配,在这块的处理应该尽量配合UI来进行,一个APP的大小,图片数量的多少,大小,很重要 首先的理解,安卓图片的标准是哪里,一般是mhdpi(720*1280)为基准,也是我们的drawable文件夹 其次 倍

程序小渣渣 512

浅谈Android屏幕适配问题

昨天就没有更新文章,在不更新就说不过去了,今天是清明节的第一天,我没有出去玩,不过在我心里是这么认为的,心中有风景,到哪都是旅游。不好意思,扯远啦,收回来。 做过Android项目的人应该都知道,Android屏幕适配问题是比较烦人的,因为Android不像IOS那样,只要那几个分辨率,反观Android就不同,Android手机的屏幕分辨率类别太多。虽然本人也没有做过几个Android项目,但是

webbc的博客 613

安卓屏幕适配问题

屏幕适配问题 首先一般都不需要适配: 良好的屏幕适配习惯: 多用dp,不用px, 多用线性布局和相对布局,不用绝对布局, 如果必须传px的话,将dp转为px之后再使用 这样的话到后期基本上不会有大问题,通过良好的习惯已经解决了这些问题! 如还有问题就用哪五种 图片适配 hdpi -&gt; 480800 设备密度1.5 mdpi -&gt; 320480 设备密度1 ldpi -&gt; 3...

wdx_1136346879的博客 226

Android 屏幕适配问题

文章目录Android 屏幕适配问题基本概念ppidpidensitydpsp密度限定符方向限定符转换公式获取屏幕信息适配问题适配方案今日头条方案smallestWidth 最小宽度限定布局适配其他dimens 文件生成工具dimens 文件生成插件 Android 屏幕适配问题 基本概念 ppi ppi(Pixels Per Inch)硬件像素密度:在物理设备上,每英寸包含的物理像素点数量,ppi是不能修改的。 dpi dpi(Dots Per Inch)屏幕像素密度:是软件概念,每英寸包含多少个点,dp

xiangxiongfly 2579

android屏幕适配问题

android屏幕适配问题 如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。  首先:你需要在AndroidManifest.xml文件的元素如下添加子元素 supports-screens android:largeScreens="true"        android:normalSc

572

android屏幕适配无效_「Android 屏幕适配终结者」问题汇总

感谢 BlankJ 老师的分享,AndroidAutoSize 已经迭代 10 多个版本,扩展了很多自定义功能,基本能满足所有人的屏幕适配需求,唯一美中不足的就是屏幕适配在某些情况下可能会失效的问题,这一直困扰着 AndroidAutoSize 以及今日头条屏幕适配方案,之前我对于此问题提供了两种解决思路第一个就是在布局显示到屏幕上之前,调用框架提供的方法将 DisplayMetrics 的参数恢...

weixin_39713538的博客 444
上一篇: Android home键和back键区别
下一篇: ListView问题汇总
wx1qq1com
博客等级 码龄17年 123粉丝 23原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值