Android适配不同的设备

感谢原作者的整理:

http://blog.csdn.net/chenyjays/article/details/41308887

适配不同的语言

  把UI中的字符串存储在外部文件,通过代码提取。

创建区域设置目录和字符串文件

  为了支持多国语言,在res/中创建一个额外的values目录以连字符和ISO国家代码结尾命名,比如values-es/ 是为语言代码为"es"的区域放置简单的资源文件的目录。Android会在运行时根据设备的区域设置,加载相应的资源。

  若你决定支持某种语言,则需要创建资源子目录和字符串资源文件,例如:

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

  添加不同区域语言的字符串值到相应的文件。在运行时,android系统会根据用户设备当前的区域设置,使用相应的字符串资源。

使用字符资源
  你可以在你的源代码和其他XML文件中,通过<string>元素的name属性来引用你的字符串资源。
  在你的源代码中你可以通过R.string.<string_name>语法来引用一个字符串资源,很多方法都可以通过这种方式来接受字符串。

适配不同的屏幕

  Android将设备屏幕归类为两种常规属性:尺寸和分辨率。

  有4种普遍尺寸:小(small),普通(normal),大(large),超大(xlarge)
  4种普遍分辨率:低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi)

创建不同的layout

  为了针对不同的屏幕去优化用户体验,你需要对每一种将要支持的屏幕尺寸,创建唯一的XML文件。每一种layout需要保存在相应的资源目录中,目录以-<screen_size>为后缀命名。例如,对大尺寸屏幕(large screens),一个唯一的layout文件应该保存在res/layout-large/中。

  例如,这个工程包含一个默认layout和一个适配大屏幕的layout:

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

  layout文件的名字必须完全一样,为了对相应的屏幕尺寸提供最优的UI,文件的内容不同。

  按照惯例在你的app中简单引用:

  protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);
  }

  系统会根据你的app所运行的设备屏幕尺寸,在与之对应的layout目录中加载layout。

  另一个例子,这一个工程中有为适配横向屏幕的layout:

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

  默认的,layout/main.xml文件用作竖屏的layout。

  如果你想给横屏提供一个特殊的layout,也适配于大屏幕,那么你需要使用largeland修饰符。

   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

创建不同的bitmap

  你应该为4种普遍分辨率:低,中,高,超高精度,都提供相适配的bitmap资源。要生成这些图像,你应该从原始的矢量图像资源着手,然后根据下列尺寸比例,生成各种密度下的图像。

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (基准)
  • ldpi: 0.75

  这意味着,如果你针对xhdpi的设备生成了一张200x200的图像,同样的你应该对为hdpi生成150x150,为mdpi生成100x100, 和为ldpi生成75x75的图片资源。

  然后,将这些文件放入相应的drawable资源目录中:

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

  任何时候,当你引用@drawable/awesomeimage时系统会根据屏幕的分辨率选择恰当的bitmap。

 

适配不同的系统版本

指定最小和目标API级别

  AndroidManifest.xml文件中描述了你的app的细节,并且标明app支持哪些Android版本。具体来说,<uses-sdk>元素中的minSdkVersion和targetSdkVersion 属性,标明在设计和测试app时,最低兼容API的级别和最高适用的API级别(这个最高的级别是需要通过你的测试的)。

  随着新版本Android的发布,一些风格和行为可能会改变,为了能使你的app能利用这些变化,而且能适配不同风格的用户的设备,你应该设置targetSdkVersion的值去匹配最新的可用Android版本。

 

在运行时检查系统版本

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
          ActionBar actionBar = getActionBar();
          actionBar.setDisplayHomeAsUpEnabled(true);
  }

 

使用平台风格和主题

  Android提供了用户体验主题,为app提供基础操作系统的外观和体验。这些主题可以在manifest文件中被应用于你的app中.通过使用内置的风格和主题,你的app自然地随着Android新版本的发布,自动适配最新的外观和体验.

  使你的activity看起来像对话框:

  <activity android:theme="@android:style/Theme.Dialog">

  使你的activity有一个透明背景:

  <activity android:theme="@android:style/Theme.Translucent">

  应用在/res/values/styles.xml中定义的自定义主题:

  <activity android:theme="@style/CustomTheme">

  使整个app应用一个主题(全部activities)在元素中添加android:theme属性:

  <application android:theme="@style/CustomTheme">

时间: 2024-08-08 22:16:45

Android适配不同的设备的相关文章

Android适配方案小结(三)

在Android适配方案小结(一).(二)中,我们了解了一些基本概念. 那么在具体开发中,我们应该注意什么呢. 首先,我们必须要知道,其实适配的关键在于两点: (1)不同分辨率设备的适配,这点在单位的使用上用dp.sp以及图片资源存放于不同的drawable文件夹就可以解决问题: (2)不同尺寸的适配,这点主要靠将相关值以及布局文件放置于不同的文件夹中来解决. 2.1 values文件夹 可以在工程下创建不同的values文件夹:values-sw480dp, values-sw600dp, v

Android - 支持不同的设备 - 支持不同的屏幕

Android - 支持不同的设备 - 支持不同的屏幕 Android整体上按照两大类来分类设备屏幕:尺寸和分辨率.app在设备上运行应该考虑大小和分辨率.同样的,你应该包含不同的资源来让app适应不同的屏幕大小和分辨率. 整体上有四种尺寸:小的,正常的,大的,超级大的 和四种分辨率:低分辨率(ldpi),中分辨率(mdpi),高分辨率(hdpi),超高分辨率(xhdpi) 为了声明不同屏幕的不同的布局和突变,你需要把不同的资源放在不同的文件夹下,和处理不同语言的方法一样. 同样要注意到在考虑屏

Android适配器之DataModifyHelper数据操作类的封装

编写适配器代码时常常被以下几个问题所困扰: 1.业务层和适配器中对同一组数据进行维护,难以管理 2.在业务层针对数据进行修改后必须通知适配器更新,否则提示The content of the adapter has changed but ListView did not receive anotification 3.业务层修改数据时充斥大量的非空&数据标准化等冗余代码 针对前两个问题,可以将数据交由适配器去管理,业务层对数据的增删改查均通过适配器进行处理,这样仅需要维护好adapter中的数

Android 适配知识点

转载:https://gold.xitu.io/post/58451c1d8e450a006c0f1c74 支持多种屏幕 Android 可在各种具有不同屏幕尺寸和密度的设备上运行.对于 应用,Android 系统在不同设备中提供一致的开发环境, 可以处理大多数工作,将每个应用的用户界面调整为适应其显示的 屏幕.同时,系统提供 API,可用于控制 应用适用于特定屏幕尺寸和密度的 UI,以针对 不同屏幕配置优化 UI 设计.例如,您可能想要不同于手机 UI 的 平板电脑 UI. 虽然系统为使您的应

Android适配难题全面总结

支持多种屏幕 Android 可在各种具有不同屏幕尺寸和密度的设备上运行.对于 应用,Android 系统在不同设备中提供一致的开发环境, 可以处理大多数工作,将每个应用的用户界面调整为适应其显示的 屏幕.同时,系统提供 API,可用于控制 应用适用于特定屏幕尺寸和密度的 UI,以针对 不同屏幕配置优化 UI 设计.例如,您可能想要不同于手机 UI 的 平板电脑 UI. 虽然系统为使您的应用适用于不同的屏幕, 会进行缩放和大小调整,但您应针对不同的屏幕尺寸和密度优化 应用.这样可以最大程度优化所

【android学习】安卓设备实现触摸事件的监听,跨进程事件注入

最近想实现触摸屏的事件记录,并且分别做时间戳标记,类似于adb shell 下的getevent/setevent,查了很多资料,下面是一些总结. 实现方法: 1.利用onclick方法等.这种方法只能用于自己的Activity和View中,如果要检测其他Activity,比如键盘就不行了. 2.从linux内核入手.在事件分发前截获事件,可以对任意Activity实现事件捕获. android触摸事件的流程: http://blog.csdn.net/sunnyfans/article/det

Linux开发基于Qt的Android应用指定调试设备

Linux开发基于Qt的Android应用指定调试设备 最近安装了中外结合的Ubuntu Kylin试试.然后换上了搜狗输入法,这个编码的感觉比微软那个爽多了.开Qt Creator.通过Chromium来访问网页也是飞快的,使用GCC编译的速度也是非常满意的.而在指定安卓设备的时候遇到了一点儿小麻烦:我在将安卓平板电脑连接到电脑的时候,发现adb无法读取,从而Qt Creator的界面看不到我们的真机设备.怎么办呢?记得以前也解决过,但是忘记通过博客记录方法了,这次一定要记下来,以后可不能忘记

Android ADB工具-管理设备 app(二)

Android ADB工具-管理设备 app(二) 标签(空格分隔): Android 4.管理设备 app 命令 功能 adb install [-r|-s] <apkfile> 安装 apk 文件 adb uninstall [-k] <packagename> 卸载 app adb shell top [-m <number>] 查看内存占用情况 adb shell ps 查看进程列表 adb shell kill <pid> 杀死一个进程 adb s

Android 适配(一)

一.Android适配基础参数 1.常见分辨率(px) oppx 2340x1080 oppR15 2280x1080 oppor11sp 2160*1080 1080*1920 (主流屏幕16:9) 1080*2160 18:9 手机主流分辨率: 1080*2160 高端 16:9 手机主流分辨率: 1080P (1080*1920) 或 2K (1440*2560) 分辨率 低端 16:9 手机主流分辨率:720P (720*1280) 分辨率 退到五六年前,一般 Android 手机的主流