如何将一个应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚做屏幕的开发人员来说,还真不是一件多么简单的事情。
首先:你需要在
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 = new
DisplayMetrics();
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)
);
分享到:
相关推荐
AndroidScreenDemo这个示例项目可能包含了一些实际的代码和布局文件,供开发者学习和参考如何解决屏幕适配问题。通过深入理解并实践这些知识,开发者可以构建出适应各种Android设备的应用程序。
本资源包"Android屏幕适配资源"专注于解决这一问题,提供了values资源,能够帮助开发者轻松实现不同屏幕尺寸的适配。接下来,我们将详细讨论Android屏幕适配的核心概念、方法以及如何使用此资源包。 一、屏幕适配的...
【Android屏幕适配方案终极版】是Android开发者面临的一个重要课题,尤其是在当今各种设备尺寸繁多的情况下。今日头条作为一款广受欢迎的信息聚合应用,其屏幕适配策略无疑具有很高的参考价值。这个低成本的解决方案...
"android屏幕适配px工具类"就是为了解决这一问题而设计的,它可以帮助开发者更方便地处理像素(px)单位转换,确保应用在不同屏幕上的显示效果一致。 在Android系统中,屏幕适配的核心是理解并利用密度独立像素(dp...
Android屏幕适配生成文件
android屏幕适配方法
A low-cost Android screen adaptation solution (今日头条屏幕适配方案终极版,一个极低成本的 Android 屏幕适配方案). Overview Pixel 2 XL | 1440 x 2880 | 560dpi: Pixel XL | 1440 x 2560 | 560dpi: ...
以下是一些关键的Android屏幕适配策略和技术: 1. **使用比例和相对布局(Relative Layout)**: - 不直接使用绝对像素值,而是使用比例(dp/dip)来定义控件大小,这样在不同密度的屏幕上会自动调整。 - 相对...
本文将详细介绍一个`dimens`自动生成工具的使用方法,帮助开发者更高效地处理屏幕适配问题。 首先,我们了解`dimens.xml`文件的作用。在不同屏幕尺寸的设备上,同一个UI元素的尺寸可能需要相应调整,以保持视觉的...
本篇文章将详细探讨几种常见的Android屏幕适配方案,帮助开发者解决不同设备间界面显示不一致的问题。 1. **使用比例单位(dp、sp)** Android提供了密度无关像素(dp)和可缩放像素(sp)作为尺寸单位。dp用于长度和...
本文将详述几种主流的Android屏幕适配方案,并进行对比分析,帮助开发者选择最适合项目需求的方法。 一、密度无关像素(DP/SP) Android系统采用密度无关像素(DP)作为单位来设计界面,以确保在不同密度的屏幕上...
android 屏幕适配方案小工具(可执行jar包)
总之,“Android屏幕适配工具类”是解决Android多屏幕适配问题的一个强大助手,它帮助开发者节省了大量时间和精力,让应用能在各种设备上呈现出一致且良好的视觉效果。在实际开发中,善用这样的工具可以极大地提高...
综上所述,这个压缩包提供的工具和资源旨在帮助开发者有效地解决Android屏幕适配问题,通过自定义库和自动化脚本减少手动调整的工作量,并确保应用在不同设备上的表现一致性。开发者应学习如何利用这些工具,结合...
"Android autolayout"是Google推出的一种解决屏幕适配问题的方案,它旨在帮助开发者创建能够自动调整布局以适应不同屏幕大小的应用程序。本篇文章将深入探讨Android autolayout的概念、原理以及如何在实际项目中应用...
Android 屏幕适配思维导图,花了两天的时间总结出来的,看思维导图会以一个整体的印象,有利于快速理解Android 屏幕适配的问题。
本篇文章将深入探讨Android屏幕适配中的smallestWidth维度,以及如何使用对应的尺寸文件来优化应用界面。 首先,了解"smallestWidth"的概念。smallestWidth是指设备屏幕在横屏或竖屏状态下可用来显示内容的最小宽度...
提供了android 屏幕适配方案,使用教程 https://blog.csdn.net/qq_17827919/article/details/81027491。
在Android开发中,屏幕适配是...通过以上策略和技巧,开发者可以有效地处理Android屏幕适配问题,确保应用在各种设备上都能提供良好的用户体验。持续关注Android最新的开发文档和最佳实践,以适应不断变化的设备环境。