android mtk 按键,Android 4.0 虚拟按键、手机模式、平板模式(转)
nullem;text-align:left">平臺信息:
內核:linux2.6/linux3.0
系統:android/android4.0
平臺:S5PV310(samsungExynos4210/4412)
作者:xubin341719(歡迎轉載,請注明作者)
&nBSP; ? 三星新拿回來來的BSP,編譯后沒有“返回、最近打開應用、home”三個虛擬鍵。我們硬件在設計的時候也沒有設定相應的物理按鍵,平時調試程序的時候比較麻煩。怎么把這三個按鍵顯示出來??下面我們來說明。
同時在開始分析問前我引入另外兩個問題:
table 模式、phone模式選擇;
LCD_density參數設定,來決定圖標密度大小。
一、引入問題:
1、 手機模式、平板模式
android4.0手機模式、平板模式兩種情況 界面的主體布局不太一樣,如下圖所示。
2、lcd_density
ro.sf.lcd_density=240 和ro.sf.lcd_density=160兩種不同的現象,很明顯說明這個參數的做用。后面我們遇到一個問題要從這里說明。
To change the density of the screen change /system/build.prop
ro.sf.lcd_density=240
high-density, at the right of the picture, comes by default in the mephisto's roms.
ro.sf.lcd_density=180
low density, at the left of the picture
(This means that the number of pixels per inch is240=800/3.5"
3.5" is the screen of the H1 and 800×480 display resolution).
So you can pick any number between 240 and 180 - personally I use 220.
You can do this using root explorer apk for instance:
二、問題分析
1、參考網友的說法:
將\Frameworks\base\core\res\res\values\config.xml中的下面屬性的值改為true;false
狀態:模式:phone
參數:config_showNavigationBar=true
出現以下情況:
(1)、虛擬按鍵邊上那個黑框已經出來;
(2)、看不到三個按鍵圖標;
(3)、點擊邊緣時會有顏色變化,橫屏是“返回”鍵,豎屏時點擊為“最近打開程序”;感覺那個按鍵被放大了一樣。 由上面分析,這種現象是布局出問題,我們LCD分辨率為1280*800,其實三個按鍵出來了,只不過圖標顯示太大,所以我們看不到。同時在這里我們引入前面我們提到的兩個問題:(1)、table 模式、phone模式選擇;(2)lcd_density參數設定,來決定圖標密度大小。
很明顯的我們可以看出現在編譯的時phone模式、那個圖標為什么看不到, lcd-_density設定的圖標太大。
2、問題分析
打開機器,在串口終端或者是adb shell中:
cd/system
catdefault.prop
我們可以看到:
ro.build.characteristics=phone
這就是我們所說的table、phone參數設定,不同的模式在這里決定的。查找這些參數在那里設定,最終找到:
android_ramos_4412_02/android/device/samsung/smdk4x12/device.mk
ifeq ($(BOARD_USES_HIGH_RESOLUTION_LCD),true) //(1)、如果滿足條件,就設為table模式;
product_CHARACTERISTICS:= tablet
PRODUCT_COPY_FILES += \ frameworks/base/data/ETC/tablet_core_hardware.xml:system/etc/permissions/tablet_core_hardware.xml
$(call inherit-product, frameworks/base/build/tablet-dalvik-heap.mk)
else
PRODUCT_CHARACTERISTICS:= phone//(2)、滿足條件就設為phone模式;
PRODUCT_COPY_FILES += \
frameworks/base/data/etc/handheld_core_hardware.xml:system/etc/permissions/handheld_core_hardware.xml
$(call inherit-product, frameworks/base/build/phone-hdpi-512-dalvik-heap.mk) PRODUCT_PROPERTY_OVERRIDES += \
ro.sf.lcd_density=240//(3)、lcd_density設定。
PRODUCT_AAPT_CONFIG:= normalhdpi
Endif
(1)、如果滿足條件,就設為table
BOARD_USES_HIGH_RESOLUTION_LCD = true,就設定為table模式。
(2)、滿足條件就設為phone模式;
BOARD_USES_HIGH_RESOLUTION_LCD = flash,就設定為phone模式
(3)、lcd_density設定。
在PRODUCT_CHARACTERISTICS := phone時,lcd_density設置為240。
現在我們要用table模式,所以我們要把BOARD_USES_HIGH_RESOLUTION_LCD這個參數設定為true。
android_ramos_4412_02/android/device/samsung/smdk4x12/BoardConfig.mk
OARD_USES_HIGH_RESOLUTION_LCD := true
把BOARD_USES_HIGH_RESOLUTION_LCD選為ture就可以編譯成平板模式。
(4)、把config_showNavigationBar還原成默認值
將\frameworks\base\core\res\res\values\config.xml
false
狀態
模式:table
參數:config_showNavigationBar=false
編譯,平板模式三個虛擬按鍵就可以出來了。我們的問題解決了。設為平板模式;三個虛擬按鍵出現。
三、phone模式下為什么只有一個黑框?
問題解決了,但是我們還有一個疑問,那就是按網友那種方法改動后,為什么沒有出現我們理想的效果呢?回顧“1、參考網友的說法:”更改后,個別鍵有做用,但是不能看到三個按鍵。
分析代碼android/frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.Java
mNavigationBarHeight=mHasNavigationBar? mContext.getResources().getDimensionPixelSize(com.android.internal.R.dimen.navigation_bar_height) : 0; mNavigationBarWidth=mHasNavigationBar ?mContext.getResources().getDimensionPixelSize(com.android.internal.R.dimen.navigation_bar_width) : 0;
Log.v(TAG, "xubintestmNavigationBarHeight= " + mNavigationBarHeight
???"mNavigationBarWidth=" +mNavigationBarWidth);
打印值為:
V/WindowManager( 1250): xubin testmNavigationBarHeight=72 mNavigationBarWidth=63
V/WindowManager(1250): xubin testmNavigationBarHeight=72 mNavigationBarWidth=63
打印出來的信息也沒什么問題,相對的而已文件也正確。這就回到我們開始提到那個lcd_density參數問題了,上面可以很明顯的看到,當lcd_density值發生小的改變后,圖標大小有很大的變化,再個來說我們LCD的分辨率太高,1280X800的,所以把那三人圖標放大大,所以我們看到上面那種現象。
總結
以上是生活随笔為你收集整理的android mtk 按键,Android 4.0 虚拟按键、手机模式、平板模式(转)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会不会导致内存泄漏_Java内存泄漏!为
- 下一篇: c语言中循环结构的作用,C语言中对于循环