您的位置首页生活百科

Android2.3.4解锁界面不满屏

Android2.3.4解锁界面不满屏

的有关信息介绍如下:

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);

至此,修改好了,继续新一轮编译、烧写,在期待中终于迎来了希望,搞定了。