<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    L遷客

    技術(shù)博客
    隨筆 - 1, 文章 - 12, 評(píng)論 - 1, 引用 - 0
    數(shù)據(jù)加載中……

    Android程序?qū)Σ煌謾C(jī)屏幕分辨率自適應(yīng)的總結(jié)

    Android程序?qū)Σ煌謾C(jī)屏幕分辨率自適應(yīng)的總結(jié)

      各種Android操作系統(tǒng)的手機(jī)簡(jiǎn)直就是琳瑯滿目,屏幕分辨率的差異可想而知。目前比較主流的有WVGA=800x480HVGA=480x320,另外的還有QVGA=320x240。當(dāng)然還有魅族M9DVGA=960x640,還有蛋疼的摩托羅拉的FWVGA=854x480

      其實(shí),在你layoutxml文件中,編寫的時(shí)候是不是用了許多的padding呢?如果是,那你就蛋疼了。因?yàn)檫@樣的布局永遠(yuǎn)是無法適應(yīng)所有手機(jī)屏幕的。

      正確的做法應(yīng)該是使用的是weight屬性。將你控件的layout中的widthheight設(shè)置為fill-parent,不要使用wrap——content。因?yàn)?/span>wrap-content的大小是不固定的。而weight(權(quán)重)這個(gè)屬性很好的解決了這個(gè)問題。

      當(dāng)包裹在控件外面的Layoutwidthheight屬性都設(shè)置為fill-parent時(shí),可以利用weight的反比特性。即如果控件A設(shè)置weight5,控件B設(shè)置weight7,那么A所占的空間為5/5+7),B所占的空間為7/5+7)。這樣的反比屬性對(duì)任何分辨率下的手機(jī)都是合適的。


      當(dāng)然,字體就不行了。那怎么保證字體能夠跟布局一樣能夠自適應(yīng)呢?
      呵呵,很簡(jiǎn)單,就是在你的res文件夾中創(chuàng)建一個(gè)文件夾,叫做values-320x240。其中320x240是你手機(jī)屏幕的分辨率,根據(jù)你手機(jī)屏幕的情況做不同的命名,例如values- 800x480。在該文件夾下創(chuàng)建一個(gè)dimens.xml文件,定義各種字體的大小。那么系統(tǒng)就會(huì)自動(dòng)根據(jù)你手機(jī)屏幕的分辨率去調(diào)用響應(yīng)的文件夾。


        另外,值得提醒的是,記得在你默認(rèn)的values文件下的dimens.xml文件中也要寫上相應(yīng)的字體大小哦,因?yàn)楫?dāng)系統(tǒng)無法認(rèn)識(shí)你手機(jī)屏幕大小的時(shí)候,它會(huì)自動(dòng)去找你默認(rèn)文件中的

    東西,沒有寫的話程序會(huì)崩潰。

    ************************************************************分割線************************************************************

      在看下面內(nèi)容之前首先請(qǐng)看你SDK文檔中以下這篇文章

      其實(shí)google在分辨率適應(yīng)性的東西已經(jīng)寫的很清楚了,只是我們很多人沒去看而已

      以下是結(jié)論:
        屏幕分辨率:1024x600
        density1160
        文件夾:values-mdpi-1024x600

        屏幕分辨率:1024x600
        density1.5240
        文件夾:values-hdpi-683x400  1024/1.5  600/1.5得到,需要四舍五入。

        屏幕分辨率:800x480
        density1160
        文件夾:values-mdpi-800x480

        屏幕分辨率:800x480
        density1.5240
        文件夾:values-hdpi-533x320  800/1.5  480/1.5得到,需要四舍五入。

      以此類推
        一般情況下需要?jiǎng)?chuàng)建出values values-mdpi values-hdpi文件夾,以備在一些沒有規(guī)定的尺寸屏幕上找不到資源的情況。

        然后在里面使用不同的dimens文件,Layout中不要使用顯示的數(shù)字,所有的尺寸定義全都援引dimens里面的內(nèi)容。

        這樣能夠保證深度UI定制的情況

        另外在工程的default.properties中如果split.density=false,則分辨率適配的時(shí)候文件夾命名不需要與scale相除

      例
      屏幕分辨率:800x480
      density1.5240
      文件夾:values-hdpi-800x480

    ************************************************************分割線************************************************************

      關(guān)于dimens 

        位置:res\values
        單位:px   Pixel 以畫面的像素為單位;
             in     Inches以畫面的多少英寸為單位;
             mm  Millimeter以畫面的多少毫米為單位;
             pt     Points 一點(diǎn)為1/72英寸;
             dpdip  Density-indepentdent 160dpi屏幕的一個(gè)pixel;
             ap Scale-independent Pixels 隨屏幕尺寸改變的一個(gè)pixel;

     

     

      不同的Android target會(huì)有不同的大小,應(yīng)用程序的界面需要針對(duì)不同的大小調(diào)整界面元素的尺寸。而且Android屏幕大小也可以在橫屏和豎屏之間切換,界面也需要調(diào)整。

      如何取得屏幕的方向:

      默認(rèn)情況下,當(dāng)屏幕方面切換時(shí),activityonCreate()方法會(huì)被重新調(diào)用,所以可以在其中通過以下代碼來讀取屏的方向:

      1.view plaincopy to clipboardprint?

      2.public void onCreate() {

      3.if(this.getResources().getConfiguration()

      .orientation == Configuration.ORIENTATION_LANDSCAPE) {

      4.Log.i("info", "landscape");

      5.} else if (this.getResources().getConfiguration()

      .orientation == Configuration.ORIENTATION_PORTRAIT) {

      6.Log.i("info", "portrait");

      7.}

      8.}

      9.public void onCreate() {

      10.if(this.getResources().getConfiguration()

      .orientation == Configuration.ORIENTATION_LANDSCAPE) {

      11.Log.i("info", "landscape");

      12.} else if (this.getResources().getConfiguration()

      .orientation == Configuration.ORIENTATION_PORTRAIT) {

      13.Log.i("info", "portrait");

      14.}

      15.}

      如果在androidmanifest.xml中加入配置

      android:configChanges="orientation|keyboardHidden|navigation

      當(dāng)屏幕翻轉(zhuǎn)時(shí),Activity就不會(huì)重復(fù)的調(diào)用onCreate()onPause()onResume().

      而是調(diào)用onConfigurationChanged(Configuration newConfig)

      如何取得Android屏幕大小:

      1.view plaincopy to clipboardprint?

      2.int screenWidth,screenHeight;

      3.WindowManager windowManager = getWindowManager();

      4.Display display = windowManager.getDefaultDisplay();

      5.screenWidth = display.getWidth();

      6.screenHeight = display.getHeight();

      7.int screenWidth,screenHeight;

      8.WindowManager windowManager = getWindowManager();

      9.Display display = windowManager.getDefaultDisplay();

      10.screenWidth = display.getWidth();

      11.screenHeight = display.getHeight();

      也有人提到另一種Android屏幕大小的更改方法:

      1.view plaincopy to clipboardprint?

      2.DisplayMetrics dm = new DisplayMetrics();

      3.getWindowManager().getDefaultDisplay().getMetrics(dm);

      4.int screenWidth = dm.widthPixels;

      5.int screenHeight = dm.heightPixels;

     

    posted on 2013-02-24 16:50 L遷客 閱讀(138) 評(píng)論(0)  編輯  收藏


    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 久久精品国产亚洲AV电影网| 免费无码H肉动漫在线观看麻豆| 日本不卡视频免费| eeuss影院免费92242部| 国产AV无码专区亚洲AV毛网站| 毛片无码免费无码播放| 亚洲综合一区二区三区四区五区| 亚洲欧洲日产国码一级毛片| 日韩av无码久久精品免费| 久久精品国产亚洲av瑜伽| 亚洲国产精品VA在线观看麻豆| 毛色毛片免费观看| 最近的2019免费中文字幕| 中文字幕亚洲综合久久综合| 亚洲免费闲人蜜桃| 新最免费影视大全在线播放| 亚洲美免无码中文字幕在线| 亚洲人成无码www久久久| 久热中文字幕在线精品免费| 乱淫片免费影院观看| 亚洲av乱码一区二区三区香蕉 | 国产A∨免费精品视频| 亚洲图片激情小说| 最近2019中文免费字幕| 两个人看的www免费| 亚洲AV无码国产剧情| 亚洲日韩中文字幕| 亚洲综合无码AV一区二区| 麻豆精品国产免费观看| 久久亚洲精品成人无码| 老司机亚洲精品影院| 亚洲日韩一页精品发布| 国产免费变态视频网址网站| 久久WWW免费人成一看片| 国内精品免费视频精选在线观看| 爱情岛论坛免费视频| 亚洲日韩一中文字暮| 亚洲无限乱码一二三四区| 亚洲AV一宅男色影视| 亚洲国产精品一区二区九九| 毛片免费视频在线观看|