歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 480DP屏幕使狀態欄始終顯示

Android 480DP屏幕使狀態欄始終顯示

日期:2017/3/1 10:00:32   编辑:Linux編程

糖果G-2的平板電腦產品使用的屏幕分辨率為800x480,在7inch的平板電腦上來講,分辨率是相當低的。

在Android 4.0的策略中,短邊低於600dp的產品,status bar可以進行隱藏,比如打開圖庫等全屏應用的時候,status bar消失不見。這個時候如果想看到status bar,則要用手指快速從屏幕底部向上滑動。status bar出現後會覆蓋原來app的內容。本來這是谷歌的策略,因為短邊低於480dp,說明屏幕的尺寸在高度上很小,為了使屏幕能顯示更多的內容,所以將狀態欄隱藏。但是由於我們的產品模具問題,外殼是凸起的,不像大部分平板/手機是平的。很難將狀態欄滑出來,所以有必要使狀態欄始終顯示。

代碼在frameworks/base下

base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java中


879 int shortSizeDp = shortSize
880 * DisplayMetrics.DENSITY_DEFAULT
881 / DisplayMetrics.DENSITY_DEVICE;
882 mStatusBarCanHide = shortSizeDp < 600; //短邊小於600dp的時候,status bar可以隱藏


既然是根據分辨率來的,咱就把分辨率改大點不行麼?

480 /128 * 160 = 600

所以將ro.sf.lcd_density=600

添加到system/build.prop

這樣強制使屏幕尺寸變大,問題是得到解決了,但是感覺好奇怪,圖標變得好小。怎麼看都比較別扭。

於是要從代碼著手。

2503 if (topIsFullscreen) {
2504 if (mStatusBarCanHide) {
2505 if (DEBUG_LAYOUT) Log.v(TAG, "Hiding status bar");

將if(mStatusBarCanHide) 替換為if(false)

狀態欄是時鐘顯示了,但是仍然會遮擋全屏應用的底部,這樣肯定是不行的。

索性,直接將mStatusBarCanHide賦值為false

以為這樣肯定行了,哪知道問題更大,狀態欄是始終有了,可是屏幕竟然變成了豎屏,就是在主界面下(非app下),屏幕始終豎屏顯示,旋轉也沒有任何變化,但是在應用裡面還是正常的。有點像手機的布局。

真奇怪,就改了一個mStatusBarCanHide的屬性,而且這個變量只在PhoneWindowManager.java文件中用到,怎麼會影響到布局呢?

在PhoneWindowManager.java中找mStatusBarCanHide用到的地方,唯一跟尺寸相關的地方就是

1244 public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation) {
1245 // Assumes the navigation bar appears on the bottom of the display in portrait.
1246 return fullHeight
1247 - (mStatusBarCanHide ? 0 : mStatusBarHeight)
1248 - ((fullWidth > fullHeight) ? 0 : mNavigationBarHeight);
1249 }

這個地方,該函數會在其他地方調用獲取Display的高度

services/java/com/android/server/wm/WindowManagerService.java中

} else if (longSize >= 640 && shortSize >= 480) {
6154 // VGA or larger screens at medium density are the point
6155 // at which we consider it to be a large screen.
6156 screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_LARGE;
6157 } else {
6158 screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_NORMAL;
6159 }

其中的shortSize就是通過該函數獲取的,由於mStatusBarCanHide = false, 得到的高度小於480,所以使用的布局為NORMA,不是原來的LARGE,才導致出現布局問題。

Copyright © Linux教程網 All Rights Reserved