4、怎么解决这些问题

其实给出的解决方法也是官方文档中,这里会简单的写一点,有条件可以看一下参考中的链接。

4.1 Supporting Different Devices

4.1.1支持不同的语言

这一点是应用怎么实现国际化,使用values文件添加config_qualifier属性,例如:

MyProject/
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml

4.1.2支持不同的屏幕

Android手机的屏幕有两个属性,屏幕尺寸、屏幕密度。前面也介绍了屏幕的尺寸、密度。解决这个问题,我们需要声明不同的布局,不同的图片资源。屏幕的方向(横屏、竖屏)也是在这处理的。这个和前面国际化处理一样的,使用资源文件添加config_qualifier属性。

4.1.2.1 Create Different Layouts

Android中一般分为四种尺寸: small, normal, large, xlarge。

一般创建不同的布局来适配这四种尺寸。

适配不同尺寸可以创建下面目录:

MyProject/
res/
layout/
main.xml
layout-large/
main.xml

适配横屏、竖屏可以创建如下目录:

MyProject/
res/
layout/
main.xml
layout-land/
main.xml

如果需要同时适配,需要更多的条件:

MyProject/
res/
layout/              # default (portrait)
main.xml
layout-land/        # landscape
main.xml
layout-large/        # large (portrait)
main.xml
layout-large-land/  # large landscape
main.xml

Android3.2中为了适配平板的开发,增加了smallestWidth属性。详情参考。

4.1.2.2 Create Different Bitmaps

Android中图片资源是必不可少的,并且建议提供四种图片以适应不同的屏幕密度。Android中广义的屏幕密度分为4种( low, medium, high and extra-high )。他们的比例关系如下:

01.xhdpi: 2.0
02.hdpi: 1.5
03.mdpi: 1.0 (baseline)
04.ldpi: 0.75

如果你在mdpi中放置200x200的图片,建议你在mdpi中放置100x100的图片。

图片资源文件如下:

MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png

现在已经不建议使用ldpi,因为这样的手机基本没了大笑。

4.1.3支持不同的平台版本

Android版本的升级就会带来新的api,我们怎么适配不同的系统版本呢。

1、使用 Android Support Library

2、AndroidManifest文件配置minSdk、targetSdk。

01.
02.    
03.    ...
04.

3、检测版本号,根据版本号调用api

01.private void setUpActionBar() {
02.    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
03.    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
04.        ActionBar actionBar = getActionBar();
05.        actionBar.setDisplayHomeAsUpEnabled(true);
06.    }
07.}

4、使用平台的Styles and Themes

4.2 Designing for Multiple Screens

Android设备包含phone、glass、watch、autocar等等,这些屏幕尺寸从小到watch大到电视,我们的应用能够兼容这么多的尺寸是很重要的。

4.2.1支持不同屏幕尺寸

4.2.1.1 Use "wrap_content" and "match_parent"

UI实现中view和layout的高度、宽度使用"wrap_content" and "match_parent",不使用固定值。

4.2.1.2 Use RelativeLayout

UI实现中layout尽量使用RelativeLayout,这样可以控制相对位置,还能减少布局的层级。

4.2.1.3 Use Size Qualifiers

距离使用dp和字体使用sp作为单位,不使用px。

4.2.1.4 Use the Smallest-width Qualifier

使用Smallest-width Qualifier,这个是Android3.2开始支持的,以适配平板。

res/layout-sw600dp/main.xml

4.2.1.5 Use Layout Aliases

使用Layout的别名,以适配不同尺寸的屏幕。

4.2.1.6 Use Orientation Qualifiers

使用屏幕方向属性,以支持横屏、竖屏。

4.2.1.7 Use Nine-patch Bitmaps

使用.9图片,.9图片能很好地支持横向、竖向拉伸。

4.2.2支持不同屏幕密度

见4.1.2.2 Create Different Bitmaps

4.2.3创建自适应界面

这里主要是运行时检测,什么是运行时检测呢,就是在java代码中判断需要的view是否找到(是否为空),例如下面的代码。

01.public class NewsReaderActivity extends FragmentActivity {
02.    boolean mIsDualPane;
03.
04.    @Override
05.    public void onCreate(Bundle savedInstanceState) {
06.        super.onCreate(savedInstanceState);
07.        setContentView(R.layout.main_layout);
08.
09.        View articleView = findViewById(R.id.article);
10.        mIsDualPane = articleView != null &&
11.                        articleView.getVisibility() == View.VISIBLE;
12.    }
13.}

Android应用如何支持屏幕多尺寸多分辨率问题基本就这些,更多经验需要从实践中总结。

后记:很久的时候和一位小伙伴讨论过应用适配的问题,说好了要总结出来的,现在权当实现诺言,写的有些凌乱,有读不通的通信请留言。

android 分辨率适配4k 安卓4.4分辨率_android 分辨率适配4k