android 4.1 强制使用720dp的布局
来源:互联网 发布:苹果手机降温软件 编辑:程序博客网 时间:2024/05/29 02:36
谷歌Nexus 7也是7寸,默认使用的layout跟手机有些相似,但不全是手机布局。Nexus 7是1280 x 800,DPI 为213,这样经过计算,宽度换算为DP就是
800 * 160 / 213 = 600; 4.1中对于600 ~ 719 dp的分辨率使用一种新的布局,姑且叫做Phone Tablet吧。我们的平板是1024 x 600分辨率。DPI 和DP 都是600,但是
这样设置之后,看不到导航键。
看了网上关于谷歌Nexus 7使用平板布局的方法,就是去修改ro.sf.lcd_density这个属性,知道修改后变为720DP 以上,这样的话,我们的7寸平板要修改为小于 133,因为只有这样600 * 160 / 133 = 721;才会使用720DP的布局。但是这样修改之后,感觉界面怪怪的,图标和字体都很小。因为这样修改后,实际上在逻辑上,屏幕尺寸是变大了(变为 7 *160/133) 。
4.1的代码中确实对于600DP~ 719DP之间做了特殊的修改,这部分改动太大,想直接revert不太现实,有太多的冲突。所以需要找到一个全局的,能强制使用720DP布局的地方,关键就在如何找到使用哪一种布局资源作为当前系统的布局。
查了点资料,找到Android系统中选择使用哪一种布局的文件
在frameworks/base目录下的libs/androidfw/ResourceTypes.cpp
bool ResTable_config::match(const ResTable_config& settings)
在该函数中,是选择布局的关键。这个函数把不合是的布局过滤掉,剩下的布局中,最大的那个就认为是最合适的。
比如 480DP, 600DP, 720DP,把720DP过滤掉了,剩下的就选600DP作为当前最好的布局。
只需修改如下几行
+ int WidthDp = settings.smallestScreenWidthDp;
+ if (WidthDp < 720 && 599 < WidthDp) WidthDp = 720;
if (smallestScreenWidthDp != 0
- && smallestScreenWidthDp > settings.smallestScreenWidthDp) {
+ && smallestScreenWidthDp > WidthDp) {
return false;
}
即可强制使用720DP 的布局。
其中smallestScreenWidthDp是在循环中赋值的,有几个layout 资源文件,就有几次循环
settings.smallScreenWidthDp是当前系统的屏幕宽度方向的像素无关分辨率,这里是600. 原来 的程序是 720 > 600.所以被过滤掉,而600 > 600为假,所以被保留下来。
这样改过之后,还需要修改另外一个地方,否则还是没有Navigation Bar.
同样是frameworks/base目录下
policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -1183,7 +1183,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
// 0-599dp: "phone" UI with a separate status & navigation bar
mHasSystemNavBar = false;
mNavigationBarCanMove = true;
- } else if (shortSizeDp < 720) {
+ } else if (false && shortSizeDp < 720) {
// 600-719dp: "phone" UI with modifications for larger screens
mHasSystemNavBar = false;
mNavigationBarCanMove = false;
这样就把整个系统中对600 ~719DP的处理给绕过去了。
- android 4.1 强制使用720dp的布局
- android 4.1 强制使用720dp的布局
- android 4.1 强制使用720dp的布局
- android 动态设置控件的高度,使用对应布局中的dp值
- Android 屏幕适配——关于布局文件中dp 的使用
- Android布局--TabHost的使用
- android布局LinearLayout的使用
- Android布局FrameLayout的使用
- Android表格布局的使用
- android自定义布局的使用!
- Android布局FrameLayout的使用
- android自定义布局的使用!
- android 布局padding的使用
- Android ConstraintLayout布局的使用
- Android百分比布局的使用
- Android 布局FragmentTabHost的使用
- android 的布局单位 dip dp sp px总结
- Android布局开发中dp与px的转化
- java.rmi.ConnectException: Connection refused to host:
- POJO AXIS2 发布WEBSERVICE的讨论
- 合理配置SQLSERVER内存[z]
- Android系统如何实现UI的自适应
- 自己遇到的BUG集
- android 4.1 强制使用720dp的布局
- 【转】MinGW简介
- ios开发中网络和设备名称判断
- memcpy()和memmove()函数之间区别
- java开发中遇到的crud命名规则
- 使用微博登录还是qq登录
- Ubuntu系统平台下安装Libpcap
- 盘点:崛起中的九大HTML5开发工具
- css中强制换行word-break、word-wrap、white-space区别实例说明