问题背景:
        
        做的机器是平板,屏是横屏(分辨率是width > height, 1280*720 这种)。

        Android 9源码编译的vbmeta, vendor, system下进去,

        虚拟按键(back,home,app_swith)从左到右重叠,显示在屏幕右侧。


要求:
        平板设备,肯定是要显示在底部,不能显示在右侧。


不正常现象如下图:

Android SeekBar平板显示不出来 安卓平板一直显示android_虚拟按键

 

现象分析,因为我主要是搞驱动的,framework里面很多也看不懂。

只能从现象上去分析解决问题,下面是心路历程:


    1.最开始发现Android界面app图标特别大,后面就发现是DPI (像素密度) 太大导致的。

            (adb shell wm density 可以设置dpi)

    2.进行了设置不同dpi尝试,分别
            a.    adb shell wm density 100
            b.    adb shell wm density 160
            c.    adb shell wm density 320

        发现a虚拟按键显示在屏幕下方
            b虚拟按键显示在右侧,重叠,显示较小
            c虚拟按键显示在右侧,重叠,显示较大

    3.结论:
            
            像素密度导致了虚拟按键的位置和大小不同。 (后面发现这个确实在framework中有软件代码)
后面就是找了下代码,百度搜了下虚拟按键代码位置。

代码路径:

    frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java


里函数 setInitialDisplaySize()



然后打了一些log:

      1. 首先确认了下,底层驱动穿上来的屏幕width和height

      2. 尝试修改了这段程序里的几个旋转角度 (试了修改mSeascapeRotation, 虚拟按键方向没变化)

(修改这个原因是由于adb shell wm density设置时,发现这个变化了,反过来想可能相关)

 

Android SeekBar平板显示不出来 安卓平板一直显示android_framework_02

3.同时发现这个变化了:

        在虚拟按键显示在底部时,这个变量为false
        在虚拟按键显示在右侧时,这个变量为true


所以我这里直接将它设置为false,后面就显示正常了。 (但是我的机器,触摸屏触摸不到)

所以我又遇到一个问题:

        是TP固件的问题导致底部不能触摸,还是通过修改虚拟按键ui宽度解决这个问题


(自己想的肯定是TP固件没调好,但是开发中间阶段,肯定是虚拟按键能使用就行了)


(此时adb shell wm density 260, 虚拟按键变大了,可以使用了,


但是客户的app是160dpi开发的。。。😓😓,后面应该还是要调试tp固件)

 

Android SeekBar平板显示不出来 安卓平板一直显示android_固件_03

先改下虚拟按键高度,保证能用吧,tp效果后面再调试


修改位置,文件目录:

 

Android SeekBar平板显示不出来 安卓平板一直显示android_固件_04

再打点log,主要是计算shortSizeDp和longSizeDp两句话里面的

Android SeekBar平板显示不出来 安卓平板一直显示android_java_05

Android SeekBar平板显示不出来 安卓平板一直显示android_固件_06

修改好了!!

end~