Android中UI的单位dp,sp和px使用问题

当前位置:首页 » 笔记
In 学习, 笔记  @2015-08-06

首先我看到这一些单位有点恍惚,之前接触过的就是px像素单位,为了适配不同分辨率的屏幕,Android建议使用dp(dip)作为除文字意外的组件的尺寸单位,文字的就用sp。
屏幕像素密度(ppi)计算:ppi = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数;
如800×480的4英寸屏幕的ppi = √800²+480² / 4 = 233ppi。

dp与px换算:
px = dp*ppi/160
dp = px / (ppi / 160)

sp与px换算
px = sp*ppi/160
sp = px / (ppi / 160)

现在市场比较常用的屏幕分辨率:
800×480(854×480)
1280×720(1280×768,1280×800)
1920×1080
截至2015年6月Android设备分辨率趋势
(以上统计来自友盟指数
多屏幕适配的3条原则:
1) 设置view的属性android:layout_width和android:layout_height的值时,wrap_content,match_parent或dp比px更好,文字大小应该使用sp来定义。
2) 在程序的代码中不要出现具体的像素值,在dimens.xml中定义;
3) 对不同的屏幕提供合适大小的图片。

屏幕适配的注意事项:
1.AndroidManifest.xml设置
android:anyDensity=”true”时,应用程序安装在不同密度的终端上时,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。
相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源:
1) 如果drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源;
2) 如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源,其他同理;
3) 如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有,系统会加载drawable-mdpi中的资源,其他同理,使用最接近的密度级别。

2.横屏竖屏目录区分
1) drawable
a) drawable-hdpi该图片即适用于横屏,也适用于竖屏;
b) drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源;
c) drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。其他同理。
2) layout
在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。

3.使用9-patch PNG图片
使用图片资源时,如果出现拉伸,因为图片处理的原因,会变形,导致界面走形。9-patch PNG图片也是一种标准的PGN图片,在原生PNG图片四周空出一个像素间隔,用来标识PNG图片中哪些部分可以拉伸、哪些不可以拉伸、背景上的边框位置等。
“上、左”定义可拉伸区域
“右、下”定义显示区域,如果用到完整填充的背景图,建议不要通过android:padding来设置边距,而是通过9-patch方式来定义。

4.不同的layout
Android手机屏幕大小不一,有480×320, 640×360, 800×480……怎样才能让Application自动适应不同的屏幕呢?其实很简单,只需要在res目录下创建不同的layout文件夹,比如:layout-640×360、layout-800×480……所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。

参考:
http://blog.csdn.net/guozh/article/details/8954994
http://blog.csdn.net/jdsjlzx/article/details/45891551
http://www.cnblogs.com/zhwl/archive/2013/06/12/3132722.html
http://www.cnblogs.com/bluestorm/p/3640786.html

标签: , , , , ,   评论: Android中UI的单位dp,sp和px使用问题已关闭评论 

Eclipse中我常用的快捷键及输出调试方法

当前位置:首页 » 笔记
In 笔记  @2015-07-02

Eclipse的快捷键很多,以下是我会经常使用的,后面重构用到的快捷键还没接触到,先记一下,以后应该会用到,因为我对代码的看相和可读性还是有一定要求的,最开始写出来的代码一般都不怎么好看,重构是写出漂亮代码的必经之路。

package control;
public class Main{
	public static void main(String[] args){
		//编辑中常用到的快捷键:
		//Ctrl+1 快捷修复
		//Ctrl+D 快捷删除
		//Shift+Enter从当前行任意位置快速换行
		//Ctrl+F11 运行最后一次执行的项目
		//Alt+上/下 快速移动行
		//Ctrl+Alt+上/下 快速复制行
		//Ctrl+M 最大化当前工作区
		//Alt+/补全代码
		//Ctrl+/ 快速注释代码
		// /**+Enter 快速添加代码(函数)说明
		// syso+自动补全
		//Ctrl+Shift+O 快速import调用的类
		
		//代码重构常用快捷键:
		//Alt+Shift+R 重命名(类,变量等)
		//Alt+Shift+M 抽取方法
		//Alt+Shift+F 把Class中的local变量变为field变量
		//Alt+Shift+Z 重构中的撤销编辑(Undo)
		//Ctrl+Shift+F 格式化当前代码
	}
}

Eclipse中目前我知道的输出调试:

package control;
public class DebugTest{
	public static void main(String[] args){
		//调试方法:
		//System.out.println输出语句
		System.out.println("this is String debug info");
		//System.err.println可以输出红色错误信息
		System.err.println("this is String error info");
		
		//try catch 错误信息
		int[] ints = new int[20];
		try{
			for(int i = 0; int < 21; i++){
				ints[i] = i+1;
				System.out.println(i+1);
			}
		} catch (Exception e) {
			System.err.println{"数组越界异常"};
		}	
		
		//断点运行调试异常:
		//在当前行双击行号设置断点(快捷键:Ctrl+Shift+B)
		//debug模式执行(小虫子)
		//进入后按F8一步一步执行
		int[] ints = new int[20];
		try{
			for(int i = 0; int < 21; i++){
				ints[i] = i+1;
				System.out.println(i+1);
			}
		} catch (Exception e) {
			e.printStackTrace();//详细错误信息追踪
			System.err.println{"数组越界异常"};
		}	
	}
}
标签: , , ,   评论: 1枚 

Android编程遇到的小问题20150626

当前位置:首页 » 笔记
In 笔记  @2015-06-27

除了上篇遇到的问题,还有下面几个小问题,也做个记录:

1.用android 2.2模拟器后主界面没有菜单栏等按钮,这个问题是由于创建模拟器的时候没有选择虚拟按钮,需要关掉模拟器,在AVD Manager中选择你的android 2.2模拟器,点击右侧Edit编辑修改,把它的Skin项改为“Skin with dynamic hardware control”,再次启动模拟器即可。

2.Eclipse修改类名,这个以前记得,突然脑袋短路找不到了,选择类名,右键,找到refactor下的rename选项即可。

3.用到tomcat服务器的时候,需要查看或者修改tomcat的端口,端口号在哪里呢?在tomcat安装目录下的conf/server.xml找到:


其中 port=”8080″就是tomcat的服务端口,可以根据你自己的需要修改为别的端口。

标签: , , ,   评论: Android编程遇到的小问题20150626已关闭评论