隨筆-1  評論-68  文章-98  trackbacks-0

          Launcher App:\cupcake\packages\apps\Launcher

          待機畫面分為多層,桌面Desktop Items在\res\layout-*\workspace_screen.xml中設(shè)置:

          <com.android.launcher.CellLayout

          ... ...

              launcher:shortAxisCells="4"
              launcher:longAxisCells="4"

          ... ...

          />

          表示4行4列

          再看看 com.android.launcher.CellLayout ,其中有定義屏幕方向的參數(shù),

          private boolean mPortrait;

          但是一直沒有初始化,也就是mPortrait=false,桌面的單元格設(shè)置一直是以非豎屏(橫屏)的設(shè)置定義進行初始化。

          再來看看橫屏和豎屏情況下的初始化不同之處,就可以看出BUG了。

          boolean[][] mOccupied;//二元單元格布爾值數(shù)組

                      if (mPortrait) {
                          mOccupied = new boolean[mShortAxisCells][mLongAxisCells];
                      } else {
                          mOccupied = new boolean[mLongAxisCells][mShortAxisCells];
                      }

          如果我們滿屏顯示桌面(橫向和縱向的單元格數(shù)不一致),而不是默認的只顯示4行4列,則mShortAxisCells = 4, mLongAxisCells = 5,數(shù)組應(yīng)該初始化是:new boolean[4][5],但是實際是按照非豎屏處理,初始化成了new boolean[5][4],會產(chǎn)生數(shù)組越界異常。

          可以在構(gòu)造函數(shù)中,添加通過屏幕方向初始化mPortrait,代碼如下:

          public CellLayout(Context context, AttributeSet attrs, int defStyle)

          {
                  super(context, attrs, defStyle);
                  mPortrait = this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT;// 新增代碼

          ... ...

          }


          本文來自CSDN博客,轉(zhuǎn)載請標明出處:http://blog.csdn.net/netpirate/archive/2009/06/05/4245445.aspx

          posted on 2009-08-29 23:26 Xu Jianxiang 閱讀(624) 評論(0)  編輯  收藏 所屬分類: Android
          主站蜘蛛池模板: 马鞍山市| 洪湖市| 临夏县| 东至县| 莫力| 会泽县| 萍乡市| 永胜县| 搜索| 鄂州市| 亚东县| 棋牌| 襄城县| 泸州市| 萨嘎县| 马公市| 太保市| 富裕县| 上高县| 柘荣县| 江都市| 图木舒克市| 莆田市| 邳州市| 隆化县| 绥江县| 曲阜市| 辽宁省| 昂仁县| 榆社县| 兴安县| 客服| 长葛市| 金昌市| 昌黎县| 射阳县| 资兴市| 那坡县| 波密县| 华蓥市| 武威市|