zoukankan      html  css  js  c++  java
  • Android 多分辨率与不同语言适配*

    一、适配不同国家语言

    智能手机系统设置里各国语言的选项,然后我们项目里可以通过资源目录实现适配语言。我们知道工程的根目录有个res/的目录,res/下有一个资源类型的目录,其中有个values/strings.xml默认文件,

    在res/目录下创建多个values/strings.xml文件,但是values目录需要改名,例如:

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

    其中,英语,/values/strings.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="title">My Application</string>
        <string name="hello_world">Hello World!</string>
    </resources>

    西班牙语,/values-es/strings.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="title">Mi Aplicación</string>
        <string name="hello_world">Hola Mundo!</string>
    </resources>

    法语,/values-fr/strings.xml:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string name="title">Mon Application</string>
        <string name="hello_world">Bonjour le monde !</string>
    </resources>
    然后,我们就可以在代码中使用R.string.<string_name>语法来引用字符串资源就行了。

    不同屏幕适配要点

    1,使用wrap_content、match_parent、weight 
    2,使用相对布局,禁用绝对布局 
    3,使用自动拉伸位图 .9格式(nine-patch图片) 
    4,使用dp来设置控件间距,使用sp来设置文字大小 
    5,提供备用的位图, xhdpi,hdpi,ldp 
    6,使用Size限定符,在普通layout文件夹中写一个布局文件,在到layout-large文件夹中写另一个布局文件,然后根据屏幕大小不同来加载不同的布局文件。 
    7,使用Smallest-width限定符,比如:layout-sw600dp 就会在屏幕是600dp以上就会加载这个布局文件。

    前一阶段开发android项目,由于客户要求进行多分辨率适配,能够支持国内主流的分辨率手机。因此经过了几次开发走了很多弯路,目前刚刚领略了android多分辨率适配的一些方法。

    先介绍一下所走的弯路,由于android的布局文件存放在res的layout中,可以根据不同的手机分辨率指定特定的layou参数,如图所示:

    根据不同的手机设定多个分辨率layout参数布局文件。因此再程序加载的过程中,会把运行该分辨率下的布局文件。 这样开发的问题是回到至布局文件很多,很乱。不方便管理。一旦修改需要修改很多布局文件。

    通过分析反编译参看国内主流应用(QQ,京东,微信等)的布局文件进行学习,发现布局文件基本是一套的,把布局文件中需要设定的数值文件values设置成多套。合理的布局应该是这样

      

    可以看出布局layout是一套的,但是需要资源的时候drawable可以是多套的,根据分辨率的不同做特别的适配。而对应的values一定是多套的。而且values的适配已经从低分辨率800x432一直到高分辨率1280x752都有对应的数据。而且会根据密度进行单独的适配hdpi,xhdip。这样对于代码是比较容易维护的。

    因此根据所获取的信息,本人把项目进行了重构,下面是重构后的布局文件,

    短小精干,由于用到的图片资源不多,因此就用一套drawable,用一套布局layout,把对应的value使用多套。在不同手机上运行过。基本上都能够满足用户体验。把数据完整的显示出来,效果也不失真。

    dimen.xml在values文件夹下面

    <resources>
        <!-- Default screen margins, per the Android Design guidelines. -->
        <dimen name="btn_width">16dp</dimen>
        <dimen name="btn_height">16dp</dimen>
    </resources>

    布局中的使用:

    <Button   
    android:text="@string/test_dimen1"   
    android:id="@+id/Button01"   
    android:layout_width="@dimen/btn_width"   
    android:layout_height="@dimen/btn_height"/> 

    文件夹含义:

    values-v11   -------API 11+代表android 3.0 +,意思是在API11设备上,该目录下的dimens.xml代替res/values/dimens.xml

    values-480x320、values-800x480等 ------------意思是在不同分辨率下,该目录下的dimens.xml代替res/values/dimens.xml

    API对应版本号

    拿京东的看看,定义了不少啊

  • 相关阅读:
    Docker私有仓库
    Docker入门
    HBase表的数据导出和导入
    HBase shell的使用记录
    Redis集群模式(Cluster)部署
    Oracle数据库sqlldr工具的使用
    oracle使用impdp和expdp导入导出数据
    Linux自动同步时间的方法
    Linux配置ssh免密码登陆
    Linux中逻辑卷(LV)的创建、增大和减小
  • 原文地址:https://www.cnblogs.com/chenxibobo/p/6046098.html
Copyright © 2011-2022 走看看