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对应版本号

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

  • 相关阅读:
    XML(学习笔记)
    css样式学习笔记
    Request(对象)
    sql一些错误修改的总结
    转载(如何学习C#)
    sql server(学习笔记2 W3Cschool)
    sql sqrver(学习笔记1 W3Cschool)
    关于 flutter开发碰到的各种问题,有的已经解决有的一直没解决或者用其他方法替代
    关于 Flutter IOS build It appears that your application still contains the default signing identifier.
    关于 flutter本地化问题 The getter 'pasteButtonLabel' was called on null
  • 原文地址:https://www.cnblogs.com/chenxibobo/p/6046098.html
Copyright © 2011-2022 走看看