精华内容
下载资源
问答
  • 安卓中机型适配问题

    千次阅读 2017-07-17 00:19:00
    适配不同版本的操作系统,需要明确每一个版本API Changed List。 2.厂家型号分类。即适配三星、小米、华为等……这块有两种适配方式,一是公版适配,二是定制开发。 公版适配(大多数app使用),这里指的是只存在...

    需要考虑的问题


    1.操作系统适配。即适配不同版本的操作系统,需要明确每一个版本API Changed List。
    2.厂家型号分类。即适配三星、小米、华为等……这块有两种适配方式,一是公版适配,二是定制开发。
    公版适配(大多数app使用),这里指的是只存在一套代码,一个APK,要适配所有的厂商或机型。比较差的方式通常就是在代码中涉及到不同厂商或型号的地方通过if语句利用Build里的厂商标识等进行不同的策略,其结果就是适配得越多,if语句越复杂,越难维护。其实只要利用一个工厂模式就可以做得更灵活一些。
    3.硬件兼容。主要是对包括屏幕、CPU、内存、外存、传感器等进行适配,其主要思路也是抽象隔离。
    在数据层,最主要的是进行外部存储的适配,即考虑数据存储的位置、格式、易失性等。通常这种持久化的数据存储,都要考虑存储位置及其易失性问题,不要把关键数据保存在易失的外部存储当中,还有Android 5.X开始的外卡的不可访问性,进而,可以根据存储空间和数据特点考虑明文格式还是密文格式,压缩还是不压缩。设备繁多、品牌众多、版本各异,芯片、摄像头、分辨率不统一等等,这些都逐渐成为Android系统发展的障碍,碎片化严重不仅造成Android系统混乱,也导致Android应用隐形开发成本的增多。
    最终解决办法:由于android手机的碎片化,没有像ios那样只有固定的机型和尺寸,所以要做到全部适配是不可能,合适的做法是适配市场上流行的机型尺寸、厂商和硬件设备。

    版本适配问题

    在src目录下建不同版本的values目录

           values-v19
        values-v21

    厂商适配问题

    屏幕适配问题(屏幕大小和屏幕密度)

    1.尽量使用.9图片来自动适应屏幕;
    关于.9图片上下左右四条黑线的含义解释:
    (1)上方黑线代表横向拉伸区域。
    (2)左边黑线代表纵向拉伸区域。
    (3)下方黑线代表横向内容显示区域。
    (4)右边黑线代表纵向内容显示区域。
    2.尽量使用最少的图片资源,以减少内存的占用。
    3.如下
    第一种情况:欢迎页面、引导页面等图片需要铺满整个屏幕时,我们至少需要做两套图来满足屏幕的适配(480*800、720*1280)放于对应的文件夹下;
    第二种情况:直接切图(480*800)放于对应的文件夹,让其自动适应。
    4.在Android系统中,将屏幕大小划分成以下几种

    屏幕大小
    small
    normal
    large
    extra large

    5.常见的密度QVGA(240X320)、HVGA(320X480)、WVGA800(480X800)

    屏幕密度
    low
    medium
    high
    extra high

    1).在android3.0之后出现了一套新的屏幕尺寸适配规则: swXXXdp, wXXXdp, hXXXdp
    2).可以控制的程度更细,能够精确适配;可以覆盖指定数值以及更大的尺寸,
    swxxxdp :表示屏幕的最短边是xxxdp的屏幕都适配.
    wxxxdp:表示平行于地面的边的宽度,在表示的范围内,将会进行布局适配;

    屏幕适配相关计算

    布局(layout)适配问题

    在src目录下建不同分辨率的layout目录

           layout-1280x720
        layout-800x480

    此时,在不同的layout目录下新建有针对性的布局文件,里面的尺寸写死都没有关系。

    创建不同的布局(Create Different Layouts)


    为了让用户在不同的分辨率的设备上的体验得到优化,我们应该为每一个我们所想支持的屏幕尺寸都创建一个自己的layout XML文件,每个文件都保存在相应的资源目录,例如,如果我们想支持large screens,我们就应该在资源目录res文件夹下创建一个layout-large。android系统会根据屏幕的尺寸大小去自动的加载相应的布局。如下,一个包含这默认的layout和一个供选择的large screen的layout

        res/
            layout/
                main.xml
            layout-large/
                main.xml
        // 需要注意的是,文件名必须相同,但文件里面的内容可以相同,你可以根据不同的屏幕的尺寸制定不同的布局以优化用户的体验

    在具体的代码中,没有什么变化,android系统会自动调用不同屏幕尺寸的布局

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

    下面是一个关于横屏和竖屏的布局:

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

    如果想要提供一个特殊的layout在大屏幕设备横屏的时候,则large和land两个限定符都需要使用。

    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 

    安卓3.2及以上支持定义屏幕尺寸的一种先进方法,允许您指定资源基于最小宽度和高度的屏幕尺寸的密度独立像素。

    尺寸(dimens)适配问题

    在src目录下建不同分辨率的values目录

           values-1280x720
        values-800x480

    此时,在不同的values目录下新建dimens.xml 文件,在这个dimens文件中就可以针对不同的分辨率定义它的尺寸了。建议将layout中的尺寸数值,放到独立的尺寸资源文件dimens.xml中,这样就可以利用密度、尺寸来进行屏幕尺寸适配而不用创建多个layout.

    不要在代码中硬编码尺寸。因为性能和简单要求,Android系统内部均使用像素进行维护,例如在一个设备上执行 View.getWidth()返回10像素,不要将这个数值作为硬编码的常数,因为可能在高密度的设备上,返回的值可能会是15。

    使用权重适配  

    编写xml布局文件时,使用weight来分配屏幕的使用;

    java代码动态适配

    动态获取屏幕的宽、高 ,然后动态设置布局的尺寸;

    国际化适配问题

    字符串国际化

    只要在 res 文件夹下新建对应语言的 values 文件夹,然后在对应的values文件夹下创建strings.xml即可

        中文环境:values-zh
      英语环境:values-en
      美国英文环境:values-en-rUS
      大陆地区中文环境: values-zh-cn

    图片资源国际化

    在 res 下新建对应语言的 drawable /mipmap文件夹,创建不同的位图(Create Different Bitmaps),Android提供了自动的设备检测功能,能够根据当前设备的一些参数信息,进行动态的资源的加载,从而实现机型适配;

     英语环境下的:
      drawable-en-ldpi
      drawable-en-hdpi
      drawable-en-mdpi
      中文环境为:
       drawable-zh-hdpi
      drawable-zh-ldpi
       drawable-zh-mdpi

    因为需要适配不同屏幕,我们需要提供不同的图片来适配。

    dpi分类 具体参数
    xhdpi dpi=320, density=2
    hdpi dpi=240, density=1.5
    mdpi dpi=160, density=1 (baseline)
    ldpi dpi=120, density=0.75

    解析:

    以mdpi为基准,进行尺寸的缩放,缩放规则:
    mdpi 1 原始尺寸
    ldpi 0.75倍尺寸
    hdpi 1.5倍尺寸
    xhdpi 2倍尺寸
    xxhdpi 3倍尺寸
    xxxhdpi 4倍尺寸


    使用场景:如果我们为xhdpi的设备生成了一张200x200的图片,同时也需要为hdpi的设备生成150x150的图片,为mdpi的设备生成100x100的图片,最后为ldpi的设备生成75x75的图片。
    理解:不同设备,其屏幕密度dpi越大,同一个像素尺寸的图片显示的越小;拨不通设备的屏幕密度dpi越小(分辨率越低),同一个图片显示的就大了。高密度手机使用大图片;低密度手机用小图片;
    dpi的相关计算 :Android中,定义一套单位dp,以mdpi为标准,进行自动运算的像素数值;

    //原理公式
    px = dp * (dpi / 160)  //已知dp求px
    dp = px / (dpi / 160) //已知px 求dp
    /**
       * 可以把这个当做工具类.
       * 实现机型适配,可以指定数值,根据手机屏幕密度
       * 生成像素单位,用于代码中的尺寸设置
       */
      public static float dp2Px(Context context, int dp) {
          DisplayMetrics metrics = new DisplayMetrics();
          if (Build.VERSION.SDK_INT >= 17) {
              DisplayManager manager = (DisplayManager) context.getSystemService(context.DISPLAY_SERVICE);
              manager.getDisplay(0).getMetrics(metrics);
          } else {
              WindowManager manager = ((WindowManager) context.getSystemService(WINDOW_SERVICE));
              manager.getDefaultDisplay().getMetrics(metrics);
          }
          float px = dp * metrics.density;
          return px;
      }


    采用高清大图进行设计,分辨率低的会自动缩小,图片缩小不会失真.

    例如:5dp, 在mdpi的手机上,就是5px,在xhdpi的手机上,就是15px;sp: scalable pixel 可缩放的px, 用于文本的处理.运算规则和dp相似
    MyProject/
        res/
            drawable-xhdpi/
                test.png
            drawable-hdpi/
                test.png
            drawable-mdpi/
                test.png
            drawable-ldpi/
                test.png

    这样之后,当使用@drawable/test.png,系统都会自动根据当前设备的dpi来选择合适的图片进行显示。

    结合Html5和css3优化界面布局和适配。

    采用HTML5和CSS3制作界面,然后在WebView视图上进行显示,然后通过JavaScript进行事件的交互。

    展开全文
  • 安卓适配详解

    千次阅读 2018-01-01 01:41:48
    概述一直想把安卓开发过程中所有的关于不同手机类型,手机系统,及API版本适配做一个整理,这些内容虽然简单但细节太多,所以想整理一下,以便自己的总结,由于各种原因一直被放下,现在下定决心会持续更新博客上...

    概述

    一直想把安卓开发过程中所有的关于不同手机类型,手机系统,及API版本的适配做一个整理,这些内容虽然简单但细节太多,所以想整理一下,以便自己的总结,由于各种原因一直被放下,现在下定决心会持续更新博客上的文章,本文将详细介绍安卓界面适配过程,后期将会整理一些安卓性能,控件等方面在不同的手机和系统版本上的适配流程,希望对大家开发安卓有所帮助,由于网上很多关于一些dp,sp,px的概念资料,所以本文不进行分析,本文从以下几个部分讲解:

    • 布局适配
    • 手机,平板界面适配
    • 图片的适配
    • 手机屏幕尺寸适配
    • 代码动态配置
      下面开始一一讲解

    布局适配
    1. 对于使用传统布局来说,应尽量使用相对布局和线性布局,避免使用绝对布局,线性布局中应尽量使用权重weight适配不同尺寸的屏幕,这里说一下weight的算法:
    控件宽度 = 控件实际宽度 + 屏幕剩余宽 * 所占比例

    这里写图片描述
    布局代码:

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="Button1"
                android:layout_weight="1"/>
            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:text="Button2"/>
        </LinearLayout>

    此时Button的宽度都为0,屏幕宽度为L,按公式计算:
    Button1 = 0 + L * 1 / 3 = L / 3 ;
    Button2 = 0 + L * 2 / 3 = 2 / 3 L;

    另一种写法:

    这里写图片描述
    布局代码:

    LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Button1"
                android:layout_weight="1"/>
            <Button
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_weight="2"
                android:text="Button2"/>
        </LinearLayout>

    此时Button的宽度都为L,屏幕宽度为L,按公式计算:
    Button1 = L+ (L - 2L) * 1 / 3 = 2 / 3 L ;
    Button2 = 0 + (L- 2L) * 2 / 3 = L / 3 ;

    手机.平板界面适配

    这里写图片描述
    手机显示界面
    这里写图片描述
    平板显示界面

    在安卓开发中多数的APP都需要兼容平板电板,因为平板电脑的尺寸宽度较大,所以当屏幕横屏时多数会采取分屏显示的模式展示内容,当平板电脑竖屏时会像在手机上一样分为两个界面显示,下面一常见的新闻客户端为例,分为标题列表
    和详细内容界面:
    首先分析以下按设备分为手机和平板,平板中又分为 横屏和竖屏,总共三种状态显示模式
    布局:单布局,双布局

    • 手机—-单布局
    • 平板横屏—-双布局
    • 平板竖屏—-单布局
      在安卓中布局适配使用values文件夹适配,在每个文件夹中放入对应的布局,手机在加载时会根据设备选择相应的布局文件,此时所建文件夹为:
      这里写图片描述
      这里解释一下为什么会有large和sw600dp这两个文件夹:
      large 最小限定符 在安卓3.2之前使用,其中land为横屏,port为竖屏
      sw600dp 安卓3.2之后的平板布局限定符,其中land为横屏,port为竖屏
      这样虽然能达到目的,但是每一个文件夹里面都要放入相应的布局,而实际的布局就单布局和双布局两个,说明有的文件夹里面的布局是重复的,可是如果一旦修改可能会需要修改几个文件夹,那如何只使用两个布局搞定所有呢?这里面的方法其实和values适配像素的方法是一样的。
      我们在每个文件夹下见一个layouts.xml,在其中配置布局文件
      单布局时代码如下:
    <resources>
        <item name="main_layout" type="layout">@layout/activity_scrolling</item>
        <bool name="has_two_pans">false</bool>
    </resources>

    双布局文件:

    <resources>
        <item name="main_layout" type="layout">@layout/activity_scrolling_twopans</item>
        <bool name="has_two_pans">true</bool>
    </resources>

    此时的values文件夹应为:
    这里写图片描述
    在加载文件时:

    class ScrollingActivity : AppCompatActivity(), ItemFragment.OnListFragmentInteractionListener {
        var content: BlankFragment2? = null
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.main_layout)
            setSupportActionBar(findViewById(R.id.toolbar))
            val itemFragment = ItemFragment.newInstance(1);
            supportFragmentManager.beginTransaction().add(R.id.titleFragment, itemFragment)
            if (resources.getBoolean(R.bool.has_two_pans)) {
                content = BlankFragment2.newInstance("test","test")
                supportFragmentManager.beginTransaction().add(R.id.contentFragment, content).commit()
            }
        }
         //点击事件根据单双屏执行不同操作
      override fun onListFragmentInteraction(item: Bean) {
            if (!resources.getBoolean(R.bool.has_two_pans)) {
                var intent = Intent(this, ContentActivity::class.java)
                intent.putExtra("content", item.content)
                startActivity(intent)
            } else {
                var content2 = BlankFragment2.newInstance(item.title,item.content)
                supportFragmentManager.beginTransaction().replace(R.id.contentFragment, content2).commitNow()
            }
        }

    今天介绍到这,本文比较简单只是一些细节问题,之后的几部分将继续更新剩余适配部分。

    展开全文
  • android是适配不同版本

    2015-03-24 12:56:24
    适配不同的系统版本 新的Android版本会为你的app提供更棒的APIs,但你的app仍应该支持旧版本的Android,直到更多的设备升级到新版本为止。这节课程向你展示如何在利用新的APIs的同时仍支持旧版本Android。 ...
    
    

    适配不同的系统版本

    新的Android版本会为你的app提供更棒的APIs,但你的app仍应该支持旧版本的Android,直到更多的设备升级到新版本为止。这节课程向你展示如何在利用新的APIs的同时仍支持旧版本Android。

    Platform Versions的控制面板会定时更新,通过统计访问Google Play Store的设备数量,来显示运行每个版本的安卓设备的分布。一般情况下,在更新你的app至最新Android版本时,最好先保证你的新版app可以支持90%的设备使用。

    为了能在几个Android版本中都能提供最好的特性和功能,你应该在你的app中使用Android Support Library,它能使你的app能在旧平台上使用最近的几个平台的APIs。

    指定最小和目标API级别

    AndroidManifest.xml文件中描述了你的app的细节,并且标明app支持哪些Android版本。具体来说,<uses-sdk>元素中的minSdkVersiontargetSdkVersion 属性,标明在设计和测试app时,最低兼容API的级别和最高适用的API级别(这个最高的级别是需要通过你的测试的)。例如:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
        <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
        ...
    </manifest>
    随着新版本Android的发布,一些风格和行为可能会改变,为了能使你的app能利用这些变化,而且能适配不同风格的用户的设备,你应该设置targetSdkVersion的值去匹配最新的可用Android版本。

    在运行时检查系统版本

    Android在Build常量类中提供了对每一个版本的唯一代号,在你的app中使用这些代号可以建立条件,保证依赖于高级别的API的代码,只会在这些API在当前系统中可用时,才会执行。

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

    Note:当解析XML资源时,Android会忽略当前设备不支持的XML属性。所以你可以安全地使用较新版本的XML属性,而不需要担心旧版本Android遇到这些代码时会崩溃。例如如果你设置targetSdkVersion="11",你的app会在Android 3.0或更高时默认包含ActionBar。然后添加menu items到action bar时,你需要在你的menu XML资源中设置android:showAsAction="ifRoom"。在跨版本的XML文件中这么做是安全的,因为旧版本的Android会简单地忽略showAsAction属性(就是这样,你并不需要用到res/menu-v11/中单独版本的文件)。


    使用平台风格和主题

    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">
    

    以上信息来自Android官方;


    展开全文
  • (仅测试程序,资源分为0,下载的人多了系统可能会自动调整)要做到多版本的自动适配首先需要对系统版本进行辨别,其次是针对不同版本编写针对性的处理代码。
  • 安卓UI适配限定符

    千次阅读 2016-04-21 11:15:03
    引言对于程序在不同尺寸的Android机器上运行,对UI的适用性造成了额外的开销,不过限定符的出现,很方便的解决了这个问题。通过创建限定符相关的文件夹来解决资源的加载。...限定符(v3,v4…)可以帮助我们区分安卓版本

    引言

    对于程序在不同尺寸的Android机器上运行,对UI的适用性造成了额外的开销,不过限定符的出现,很方便的解决了这个问题。通过创建限定符相关的文件夹来解决资源的加载。


    限定符用处

    限定符(mdpi,tvdpi,hdpi)可以帮助我们判断屏幕密度
    限定符(land,port)可以帮助我们区分屏幕横竖屏状态
    限定符(en,fr…)可以帮助我们语言和地区
    限定符(v3,v4…)可以帮助我们区分安卓版本
    限定符(1024x600…)可以适配计算虚拟键或者不计算虚拟键的屏幕
    ……

    Android SDK Supporting Multiple Screens话题
    Supporting Multiple Screens


    限定符列表

    特征 限定符 描述
    屏幕尺寸 small
    normal
    large
    xlarge
    small:这种屏类似低分辨率的QVGA屏幕。对于小屏的最小布局尺寸大约是320x426dp。例如QVGA低分辨率和VGA高分辨率。
    normal:这种屏类似中等分辨率的HVGA屏幕。对于普通屏幕的最小布局尺寸大约是320x470dp。如,WQVGA低分辨率屏、HVGA中等分辨率屏、WVGA高分辨率屏。
    large:这种屏类似中等分辨率的VGA屏幕,对于大屏幕的最小布局尺寸大约是480x640dp。例如VGA和WVGA的中等分辨率屏。
    xlarge:这种屏被认为比传统的中等分辨率的HVGA屏幕大。针对xlarge屏的最小布局尺寸大约是720x960dp。在大多数情况下,这种超大屏幕的设备因为太大而要放到背包中来携带,而且最有可能的是平板样式的设备。
    注意:使用尺寸限定符不意味着资源仅用于这个尺寸的屏幕。如果没有用限定符提供与当前设备配置相匹配的可选资源,那么系统会使用与配置最接近的资源。
    警告:如果所有使用尺寸限定符的资源都比当前屏幕大,那么系统将不会使用它们,并且应用程序会在运行时崩溃(例如,如果所有的布局都被标记了xlarge限定符,而设备却是一个普通尺寸的屏幕)。
    这个限定符被添加在API级别4以后的版本中。
    屏幕方向 port
    land
    port:纵向设备(垂直)
    land:横向设备(水平)
    如果用户旋转屏幕,这个限定能够在应用程序运行期间改变。
    orientation配置字段指示当前设备的方向。
    屏幕像素密度(dpi) ldpi
    mdpi
    hdpi
    xhdpi
    nodpi
    tvdpi
    ldpi:针对大约120dpi的低分辨率屏幕;
    mdpi:针对大约160dpi的中等分辨率屏幕(在传统的HVGA上);
    hdpi:针对大约240dpi的高分辨率屏幕;
    xhdpi:针对大约320dpi的超高分辨率屏幕,被添加在API基本8以后的版本中;
    nodpi:这个限定被用于不想根据匹配的设备分辨率进行缩放的位图资源。
    tvdpi:在mdpi和hdpi之间的屏幕,大约是213dpi。这种分组不是主要的分辨率,大多数是为电视来考虑的,并且大多数应用不需要它—提供mdpi和hdpi资源就可以满足大多数应用程序需要了,并且系统会适当的缩放它们。这个限定符在API级别13以后被引入。
    四种主要的分辨率之间的缩放比例是:3:4:6:8(忽略tvdpi分辨率),因此一个9x9的ldpi位图,在mdpi中是12x12、在hdpi中是18x18、在xhdpi中是24x24。
    如果感觉在电视或其他某些设备上的图片资源不好看,并且想要试用tvdpi资源,那么缩放因子是1.33*mdpi。例如,一个100px x 100px的mdpi图片的图片应该被放大成133px x 133px的tvdpi图片。
    注意:使用分辨率限定符不意味着资源仅适用与对应分辨率的屏幕。如果没有提供与当前设备配置匹配的可选资源,那么系统会使用最接近的资源。
    MCC和MNC mcc310
    mcc310-mnc004
    mcc208-mnc00
    MCC是移动国家代码的英文首字母缩写(The mobile country code),它的后面可选择性的跟随来自设备内的SIM卡的移动网络代码(MNC:mobile network code)。如在任何载体上,mcc310代表美国,mcc310-mnc004代表美国的Venizon公司,mcc208-mnc00代表法国的Orange公司。
    如果设备使用音频连接(GSM 电话),那么MCC和MNC的值来自SIM卡。
    也可以单独使用MCC(例如,在应用程序中包含特殊国家合法的资源)。如果仅需要指定语言环境,那么可以使用language和region限定符来替代(稍后讨论)。如果决定要使用MCC和MNC限定符,就要仔细测试,使它能够满足你所期望的工作。
    还可以查看配置域mcc和mnc,它们分别指示了当前的移动国家代码和移动网络代码。
    mcc:http://developer.android.com/reference/android/content/res/Configuration.html#mcc
    mnc:http://developer.android.com/reference/android/content/res/Configuration.html#mnc
    语言和地区 en
    fr
    en-rUS
    fr-rFR
    fr-rCA
    语言是用两个字母的ISO 639-1语言代码定义的,紧跟其后的是可选的两个ISO-3166-1-appha-2地区代码字母(前面是小写的“r”)。
    这个编码不区分大小写,r前缀被用于区分地区部分,不能够单独指定地区。
    如果用户改变了系统中的语言设置,那么在应用程序的运行期间也能够改变为对应的语言。
    最小宽度 sw<N>dp
    例如:
    sw320dp
    sw600dp
    sw720dp
    屏幕的基本尺寸,是指最短的可用屏幕区域。具体的说,设备的最小宽度是屏幕可用的宽度和高度中最短的那个(也可以把它看做是屏幕的最小可能的宽度)。这样就可以使用这个限定符来确保应用程序至少有<N>dp的宽度可用于UI界面,而不管屏幕的当前方向。
    例如,如果布局在任何时候都需要至少600dp的最小屏幕尺寸,那么就能够使用这个限定符,在res/layout-sw600dp/目录中创建布局资源。系统只会在可用屏幕的尺寸至少是600dp的时候才会使用这些资源,而不管600dp是否是被用户认知的高度或宽度。最小宽度是设备的固定屏幕尺寸特征,当屏幕的方向发生改变时,设备的最小宽度不改变。
    设备的最小宽度需要考虑屏幕的装饰和系统UI的占用。例如,如果设备有一些固定的UI元素要沿着最小宽度的轴向,占用一定的屏幕空间,那么系统声明的最小宽度要比实际的屏幕尺寸要小,因为被系统占用的像素部分对用户应用程序的UI无效。因此,这个值应该是应用程序布局所需要的最小的实际尺寸(通常,这个值是布局支持的最小宽度,而不管屏幕的当前方向)。
    以下是可以使用的通用屏幕尺寸的一些值:
    1.320,针对以下屏幕配置的设备:
    240x320ldpi(QVGA手持设备)
    320x480mdpi(手持设备)
    480x800hdpi(高分辨率手持设备)
    2.480,针对480x800mdpi的屏幕(平板或手持设备)
    3.600,针对600x1024mdip的屏幕(7英寸平板)
    4.720,针对720x1280mdip的屏幕(10英寸平板)
    当应用程序提供了多个带有不同值的最小宽度限定符资源目录时,系统会使用最接近(不超出)设备最小宽度的那个资源。
    这个限定符被添加在API级别13中。
    还要看android:requiresSmallestWidthDp属性,它声明了与你的应用程序兼容的最小的最小宽度,并且smallestScreenWidthDp配置字段会持有这个设备最小宽度的值。
    可用宽度 w<N>dp
    例如:
    w720dp
    w1024dp
    指定最小的可用屏幕宽度,在资源中应该以dp为单位来定义<N>的值。当方向在横向和纵向之间改变时,这个配置值会跟当前的实际的宽度相匹配。
    当应用程序给这个配置提供了多个不同值的资源目录时,系统会使用最接近(不超过)设备当前屏幕宽度的那个配置。这个值需要考虑屏幕装饰占据的空间,因此,如果设备在显示的左边或右边有一些固定的UI元素,那么使用的宽度值就要比实际的屏幕尺寸小,因为这些固定UI元素的占用,使得应用程序的可用空间减少。
    这个特性被添加在API级别13中还要看screenWidthDp配置字段,它持有当前的屏幕宽度。
    可用高度 h<N>dp
    例如:
    h720dp
    h1024dp
    指定最小的可用屏幕高度,在资源中应该以dp为单位来定义的值,当方向在横向和纵向直接改变时,这个配置值应该跟当前的实际高度匹配。
    当应用程序给这个配置提供了不同值的多个资源目录时,系统会使用最接近(不超过)设备当前屏幕高度的那个配置。这个要考虑屏幕装饰的占用情况,因此,如果设备在显示的上方或底部有一些固定的UI元素,那么要使用的高度值要比实际的屏幕尺寸小,因为这些固定UI元素的占用,使得应用程序的可用空间减少。不固定的屏幕装饰(如电话的状态栏能够在全屏时被隐藏)是不考虑的,像标题栏或操作栏这样的窗口装饰也不考虑,因此应用必须准备处理比它们指定的空间要小的情况。
    这个限定符被添加在API级别13中。
    还要看screenHeightDp配置字段,它持有当前屏幕的高度。
    屏幕外观 long
    notlong
    long:长屏幕,如WQVGA、WVGA、FWVGA
    notlong:非长屏幕,如QVGA、HVGA、VGA
    这个限定符被添加在API级别4以后的版本中
    这个限定符完全是基于屏幕的外观比率,不相对屏幕的方向。
    还要看screenLayout配置字段,它指示了屏幕是否是长屏。
    泊位模式 car
    desk
    car:设备停靠在汽车中
    desk:设备停靠在书桌中
    这个限定符被添加在API级别8以后的版本中,如果用户改变了设备的停靠地点,那么能够在应用程序的运行期间改变这个限定。可以使用UiModeManager对象来启用或禁止这种模式。
    夜间模式 night
    notnight
    night:夜间
    notnight:白天
    被添加在API级别8以后的版本中,如果夜间模式被保留在自动模式中(默认),那么在应用程序运行期间,会基于白天的时间来进行模式的改变。可以使用UiModeManager对象来启用或禁止这种模式。
    触屏类型 notouch
    stylus
    finger
    notouch:非触屏设备
    stylus:有适用手写笔的电阻屏设备
    finger:触屏设备
    touchscreen配置字段,指示到了设备上的触屏类型。
    键盘可用性 keysexposed
    keyshidden
    keyssoft
    keysexposed:设备有可用的键盘。如果设备启用了软键盘,那么即使在硬键盘没有暴露给用户时也可以使用这个限定符。如果没有提供软键盘或者软键盘被禁用,那么只有在硬键盘被暴露给用户时才能够使用这个限定符。
    keyshidden:设备有可用的硬键盘,但是被隐藏了,并且设备没有可用的软键盘。
    keyssoft:设备有可用的软键盘,不管它是否可见。
    如果提供了keysexposed资源,但没有keyssoft资源,那么只要系统有可用的软键盘,系统就会使用keysexposed资源而不管键盘是否可见。
    如果用户打开了硬键盘,就可以在应用程序运行期间改变这个限定。
    hardKeyboardHidden和keyboardHidden配置字段分别指明硬键盘的可见性以及可见的键盘类型(包括软键盘)。
    主要文本输入法 nokeys
    qwerty
    l2key
    nokeys:设备没有用于文本输入的硬键盘;
    qwerty:设备有标准的硬键盘,不管用户是否可见;
    12key:设备有12个键的硬键盘,不管用户是否可见。
    keyboard配置字段指明可用的主要文本输入方法。
    导航键的有效性 navexposed
    navhidden
    navexposed:导航键对用户可用;
    navhidden:导航键不可用。
    如果用户能够看到导航键,那么在应用程序运行时就能够改变这个限定。
    navigationHidden配置字段,指示导航键是否隐藏。
    主要的非触屏导航方法 nonav
    dpad
    trackball
    wheel
    nonav:除了使用触屏以外,设备没有其他导航设施。
    dpad:设备有用于导航的定向板(d-pad)。
    trackball:设备有用于导航的轨迹球。
    wheel:设备有用于导航的定向滚轮(不常见)。
    navigation
    配置字段指明可用的导航方法类型。
    平台版本(API 级别) 例如:
    v3
    v4
    v7
    设备支持的API级别。如v1代表API级别1(带有Android1.0或更高版的设备),v4代表API级别4(带有Android1.6或更高版本的设备)
    警告:Android1.5和1.6只有在限定符跟平台版本完全匹配时,才能匹配资源

    限定符示例

    这里写图片描述

    只需要用横线加限定符的方式即可使用,xx-限定符


    限定符执行顺序

    限定符的匹配是向下匹配,从高向低找。


    博客名称:王乐平博客

    博客地址:http://blog.lepingde.com

    CSDN博客地址:http://blog.csdn.net/lecepin


    这里写图片描述

    展开全文
  • Android适配适配不同的系统版本

    千次阅读 2015-11-05 16:36:04
    Android适配适配不同的系统版本前言新的Android版本会为你的app提供更棒的APIs,但你的app仍应该支持旧版本的Android,直到更多的设备升级到新版本为止。这节课程向你展示如何在利用新的APIs的同时仍支持旧版本...
  • 在新的版本下,一些解决方案也随之不同。今天就遇见两个需要注意的地方,第一个是安卓环境新的配置方法;第二个是分辨率的设置与适配。  先说新的配置方法。其实本质上我感觉和2.2.2版本的配置方案是差不多的,只...
  • APP的版本升级主要分为两种方式: 1.应用市场升级 2.应用内升级 而应用内升级的方式是目前大多数APP采用的升级更新方式。 应用内升级的模式 按照不同的业务需求又可以分为两种: 1,强制性更新 如果APP有...
  • Android适配不同的系统版本

    千次阅读 2016-09-17 22:22:10
    Platform Versions的控制面板会定时更新,通过统计访问Google Play Store的设备数量,来显示运行每个版本安卓设备的分布。一般情况下,在更新app至最新Android版本时,最好先保证新版的app可以支持90%的设备使用。...
  •  新的Android版本会为你的app提供更棒的APIs,但你的app...Platform Versions的控制面板会定时更新,通过统计访问Google Play Store的设备数量,来显示运行每个版本安卓设备的分布。一般情况下,在更新你的a
  • 安卓兼容不同的设备

    2017-04-20 00:17:43
    安卓兼容不同的设备,适配不同的语言,屏幕,系统版本
  • 新的Android版本会为你的app提供更棒的APIs,但你的app仍应该... Versions的控制面板会定时更新,通过统计访问Google Play Store的设备数量,来显示运行每个版本安卓设备的分布。一般情况下,在更新你的app至最新And
  • 使android应用程序适用于不同的国家语言、型号、尺寸和SDK版本等手机环境中,其主要功能和界面风格保持不变。 手机适配主要包括三个方面:语言适配、屏幕适配、SDK平台的适配 最复杂最麻烦的是屏幕适配。 语言...
  • 适配安卓10获取唯一标识

    千次阅读 2020-02-26 17:54:13
    这些隐私权功能可能意味着应用所依赖的特定行为或数据可能会与较低版本的平台有所不同。 一,使用移动智能终端补充设备标识体系统一调用 SDK 说明:提供稳定唯一标识:OAID 1.SDK 下载地址: http://www.ms...
  • 三、适配不同系统版本 前言 智能手机的用户分布在不同国家,且偏好各异,这就要求开发阶段兼容适配;由于各厂家生产出的安卓设备分别率不同、屏幕大小和风格也存在各异,如果手机的用户设备各异,仅用一张图片...
  • 全世界安卓智能手机语言不相同,由于各厂家生产出的系统、屏幕也各异,随着SDK不断更新不同版本也有区别,android适配技能日益成为必不可少的一项专业技能。根据网上的资料和个人经验总结,整理一份目前比较完整的...
  • Github Demo: https://github.com/lliuguangbo/AutoSystemBar针对状态栏,官方从4.4版本开始支持,但是4.4和5.0以上API是不同的,6.0以上提供了两种状态栏图标样式 分别是白色和黑色样式。针对状态栏图标样式的...
  • 在这个日新月异的年代,安卓系统和安卓手机都在快速得发展和更新,于是出现了各种版本安卓系统和各种配置(屏幕尺寸、屏幕密度、分辨率等)的安卓手机。当一个应用提供一个图片资源时,如果采取一些措施,从视觉...
  • 标题栏高度:安卓:48px,iOS:44px 单位必需跟胶囊按钮一致,用px 详细介绍请看:小程序自定义导航栏适配(完美版)这里就不详细介绍了 获得版本号和状态栏高度(app.wpy) globalDat...
  • 在Android4.2以上的版本中,提供了对mipmaps的支持,如果你用Andorid Studio开发Android程序会发现Android Studio自动帮你创建了几个mipmaps文件夹,每次新建一个工程的时候,总是先把mipmap删掉,新建几个不同dpi的...
  • 1. 安卓不同版本的提醒适配 2. 国内各大厂商的角标适配
  • 一、修改应用图标 allowBackup:是否在后台打开 icon:图标,当手机分辨率不同时,会选取...gradle是Google推出的最新的需要适配程序的构建工具,能够帮助我们构建安卓应用 打开build.gradle文件,里面就可...
  • *在我们的开发中,会对不同安卓版本做适配,比如我之前做过的项目中最低兼容到4.4,最高兼容是最新的系统7.1,由于不同版本的系统中部分API版本也不同,我就要对这些API做特殊处理。新的平台有一些API不能使用旧的...
  • Android7.0 更新APK报错适配

    千次阅读 2017-06-23 17:23:41
    共3步Step1根据安卓版本进行适配不同的安装包的打开方式File file = new File(apkPath);//更新包文件 Intent intent = new Intent(); intent.setAction(Intent.ACTION_VIEW);if (Build.VERSION.SDK_INT >= 24) { //...
  • Android语言适配问题

    2017-10-16 11:08:20
    你应该想到或者看到一些重要的变化包括不同的语言、屏幕尺寸以及Andorid系统的不同版本。  下面将说明怎么使用基本的平台特性,利用可替代资源和其他功能,app就可以通过一个apk安装包为各种各样的安卓设备提
  • android 图片适配

    2016-09-02 16:25:14
    在这个日新月异的年代,安卓系统和安卓手机都在快速得发展和更新,于是出现了各种版本安卓系统和各种配置(屏幕尺寸、屏幕密度、分辨率等)的安卓手机。当一个应用提供一个图片资源时,如果采取一些措施,从视觉...

空空如也

空空如也

1 2 3 4 5
收藏数 87
精华内容 34
关键字:

安卓不同版本适配