最近做一个应用时,在android4.0以下版本中,显示都正常。但是到了4.0以上的版本,那些没有物理按键,像BACK, HOME,MENU键都是虚拟按键时,发现了个奇怪的问题, MENU键不见了…… 开始还以为是代码里的android:theme="@android:style/Theme.NoTitleBar" 、getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);这些全屏等引起的。纠结好久,才听说是由AndroidMainfest.xml文件里的
<uses-sdk
android:minSdkVersion="8"android:targetSdkVersion="16" /> 和project.properties文件里的target=android-17这几个和SDK版本相关的东西引起的。反复测试了无数遍,终于找出问题所在,原来是android:targetSdkVersion这个引起的,跟android:minSdkVersion和target=android-17无关。 先来讲下这三个值的作用
android:minSdkVersion 这个是指你的应用,所要求的目标机器上SDK的最低版本。如果这里设置了android:minSdkVersion="8"的话,那么也就是说,你的应用,要求最低的SDK是android2.2,低于这个版本的SDK的机子上,你的应用跑不起来,也就是说不支持比android2.2还低的版本。
target=android-17 这个是指你当前编译时用到的SDK的版本, android-17 也就是对应的android4.2
android:targetSdkVersion="16",这个才是罪魁祸首。它的意思是,你的应用的目标版本是16,也就是android4.1.2。 如果这里设置了,那么表示,你的应用,在android4.1.2的SDK上测试了没问题了,MENU键之类的,都能正常显示出来,那么,把你的应用装到4.1.2的SDK的机子上时,就会直接用android4.1.2上对MENU按建的处理方法,也就是用虚拟键,而没有物理键。 但是实际是你的应用在4.1.2上,MENU虚拟键是显示不出来的,所以就出问题了。 解决的办法就是,将android:targetSdkVersion值改为4.1以下,也就是改为15以下,因为在android4.0以下的版本中,都是有MENU键的,所以如果检测到这个值为15以下时,会强制显示MENU键。当然,这个值,最好不要去设,也就是直接删掉这行,在ANdroidMainfest.xml里,改成如下所示:
<uses-sdk android:minSdkVersion="8"/>