Android2.3.4解锁界面不满屏
的有关信息介绍如下:在自己的s5pv210开发平台上发现,每次恢复工厂设置(其实就是把/data和/cache目录都清空,我这边是这样处理的,没有做recovery操作),或者手动格式化/data和/cache分区,会造成第一次启动后,解锁界面不满屏,重启后OK,这要如何处理呢?
在自己的s5pv210开发平台上发现,每次恢复工厂设置(其实就是把/data和/cache目录都清空,我这边是这样处理的,没有做recovery操作),或者手动格式化/data和/cache分区,会造成第一次启动后,解锁界面不满屏,重启后OK,这要如何处理呢?
本想通过修改XML来处理,但没效果,后来发现通过文件frameworks/base/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java中有奥妙之处:
在文件中的public synchronized void show()函数有如下语句:
int flags = WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN
| WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER
| WindowManager.LayoutParams.FLAG_KEEP_SURFACE_WHILE_ANIMATING
;
其中有FLAG_FORCE_NOT_FULLSCREEN,想想,将其修改为FLAG_FULLSCREEN,接下来编译、烧写,在期待中,系统启动起来了,执行了恢复工厂设置操作后,进入新一轮期待,启动后马上让其进入待机(恢复工厂设置后第一次启动是不会先出现锁屏界面的),再唤醒,令人想不到的事发生了,还是老样子,失望ing...
既然软的不行就来硬的吧,强制让其设置大小,同样是修改该函数,进行的操作如下:
1、添加包含:
import android.view.Display;
import android.util.DisplayMetrics;
2、在如下语句
if (mKeyguardHost == null) {
if (DEBUG) Log.d(TAG, "keyguard host is null, creating it...");
后面添加如下代码:
WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
Display display = wm.getDefaultDisplay();
int statusBarHeight = (int)Math.ceil( 25 * dm.density);
int height = display.getHeight();
int width = display.getWidth();
3、把final int stretch = ViewGroup.LayoutParams.MATCH_PARENT; 注释掉。
4、修改如下语句
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
stretch, stretch, WindowManager.LayoutParams.TYPE_KEYGUARD,
flags, PixelFormat.TRANSLUCENT);
为:
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
width, (height - statusBarHeight), WindowManager.LayoutParams.TYPE_KEYGUARD,
flags, PixelFormat.TRANSLUCENT);
至此,修改好了,继续新一轮编译、烧写,在期待中终于迎来了希望,搞定了。