zoukankan      html  css  js  c++  java
  • android手机屏幕适配

    应用程序适配在不同的手机上,虽然这不算是一个技术问题,但是对于刚刚初学者来说,还真不是一件多么简单的事情。

    首先:你需要在AndroidManifest.xml文件的<manifest>元素如下添加子元素

    <supports-screens android:largeScreens="true"

           android:normalScreens="true" android:anyDensity="true"

           android:smallScreens="true"></supports-screens>

     

         名如其意,以上是为我们的屏幕设置多分辨率支持(更准确的说是适配大、中、小三种密度)。android:anyDensity="true" 这一句对整个的屏幕都起着十分重要的作用,值为true,我们的应用程序当安装在不同密度的手机上时,程序会分别加载hdpi,mdpi,ldpi文件夹中的资源。

     相反,如果值设置为false,即使我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机,如果设置android:anyDensity="false"Android系统会将240 x 320(低密度)转换为 320×480(中密度),这样的话,应用就会在小密度手机上加载mdpi文件中的资源。

     

    2.细心的人会发现自android2.0开始之后drawable文件被三个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹所取代,有些编程人员为了让应用程序默认地加载某些图片,他们会特意地去在android2.0之后的应用程序中重新创建drawable文件夹,其实这样做完全没有必要,通过第一段的分析我们得知,android:anyDensity="false"则应用会将大小密度转变成中密度,从而去加载mdpi中的资源。这里同样,当android:anyDensity="false"则应用会去加载mdpi中的资源。

    总结一下:

    第一:android:anyDensity="true"系统会依据屏幕密度,自动去找对应的文件夹

    第二:android:anyDensity="false",

    (1)              如果drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源

    (2)              如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源。

    (3)              如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有对应的图片资源,那么系统会加载drawable-mdpi文件夹中的资源

     

    3. 注意上图各种文件夹的不同表示。

    drawable-hdpi 该图片即适用于横屏,也适用于竖屏

    drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资源

    drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源

     

    3. 有时候会根据需要在代码中动态地设置某个值,比如地图,地图的pin和地图的地址提示框的相对偏移量在不同密度的手机上是不同的。这时候可以通过以下方法求出屏幕密度:

     

    DisplayMetrics metric = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metric);

    int densityDpi = metric.densityDpi;  // 屏幕密度DPI120 / 160 / 240

     

    然后可以在代码中为这几种密度分别设置便宜量

     

    但是这种方法最好不要使用,最好的方式是在xml文件中不同密度的手机进行分别设置。

    这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置

    值得一提的是:

        <dimen name="bitmap_common_topoffset">40dp</dimen>

        <dimen name="bitmap_common_bottomoffset">-14dp</dimen>

    这里的负数是完全起作用的,系统会认为它是一个负值

     
  • 相关阅读:
    Java中通过TCP协议发送和接收数据-Socket编程
    Java中通过UDP协议发送和接受数据
    多线程——线程范围内变量的共享
    多线程——线程间的同步通信
    多线程——线程同步互斥(synchronized)
    多线程——线程的生命周期
    多线程——线程的创建以及操作线程的相关方法简介
    iOS集成ShareSDK微博分享遇到问题 新浪微博登录redirect_uri_mismatch
    iOS中改变部分字体颜色
    CSS属性
  • 原文地址:https://www.cnblogs.com/rainbowhjj/p/2643023.html
Copyright © 2011-2022 走看看