手机屏幕VGA QVGA HVGA WVGA区别
对于准备换新手机的朋友,可能会参考一些参数,比如手机屏幕的分辨率。今天就来看看手机屏幕VGA QVGA HVGA WVGA区别,一般手机液晶屏幕都是TFT材质,VGA WVGA QVGA HVGE XGA只是表示屏幕分辨率只,是个代号和材质没关系。
分辨率对照表:
代号 分辨率 代号 分辨率
QVGA 320*240像素 WQVGA 400*240像素
HVGA 320*480像素 VGA 640*480像素
WVGA 800*480像素 XGA 1024*480像素
QVGA 即Quarter VGA。顾名思义即VGA的四分之一尺寸
HVGA (Half-size VGA),即VGA(640*480)的一半
WVGA 即Wide VGA
WQVGA 全称:Wide Quarter Video Graphics Array
VGA 和XGA(Extended Graphics Array) 详情见百度百科
他们和屏幕大小也没关系,比如 诺基亚N95和诺基亚E71都是QVGA 320*240,N95是2.6英寸 N95 8GB为2.8英寸,而E71是2.36英寸
再看,苹果iphone是HVGA 320*480 3.5英寸 而G3(HTC hero)也是HVGA 320*480 屏幕为3.2英寸。
当然同样的分辨率 屏幕越小 显示越细腻!
pt, px, DPI: 关于长度单位的误解
February 24th 2006 Posted to CSS, Browsers, Typography
在印刷排版中,“point”是一个绝对的单位,它等于 1/72 英寸,可以用尺子丈量的,物理的英寸。但在 CSS 中 pt 的含义却非如此,例如我们指定一个字体是 9pt,我们会以为按照 CSS 规范,它等于:
9 * 1/72 = 1/8 inch
这是一个误解,因为我们的显示器被分割为了一个个的像素,单个像素只能有一种颜色 (为了简化,这里暂不讨论次像素反锯齿技术),要在屏幕上显示,必须先把以 pt 为单位的长度转换为以像素为单位的长度,这个转换的媒介,就是 DPI (事实上,这里的所谓的 DPI,是操作系统和浏览器中使用的术语,即为 PPI, pixels per inch,和扫描仪、打印机、数码相机中的 DPI 是不同的概念)。
例如,无论在哪个操作系统中,Firefox 浏览器默认的 DPI 都是 96,那么实际上 9pt = 9 * 1/72 * 96 = 12px。
所以,虽然“DPI”中的“I”和“1pt 等于 1/72 inch”中的“inch”,都不代表物理上的英寸,但这两个单位互相之间是相等的,也就在相乘中约掉了。
那么,真实的物理长度怎么计算呢?请拿出一把尺子,丈量你的显示器的可见宽度 (我这里是 11.2992 英寸),除以横向分辨率 (我这里是 1024 像素),得到的就是每个像素的物理长度。
现在我们可以回答这样一个问题,网页上 9pt 的字体究竟占用了多宽的空间?答案是:
9 * 1/72 * 96 * 11.2992 / 1024 = 0.1324 英寸 = 0.3363 厘米。
手机屏幕的2.1英寸只手机的矩形屏幕对角线的长度,用对角线长度来衡量手机屏幕的大小,当然英寸也能换算成厘米一英寸,也就是25.4毫米。
1像素
简单地说,一个像素可以看作一个点,这样的点是有尺寸有面积的,尺寸单位可以与厘米互化,公式我记不清了。照片就是由许多这样的点组成的。每个点记录对应的色彩信息。
30万像素就是分辨率640*480=307200个点的合成,这里的一个点就是一个指一个像素
2分辨率
分辨率。单说分辨率是不能反映出图片品质的,分辨率的意思是,单位尺寸的像素数。通常说的是每英寸的像素数,单位是dpi。例如分辨率是72dpi,也就是说每英寸有72个像素.相当于一条直线由无数点组成一样,这里就一英寸的线段由72个相素组成.
像素密度:像素总数/屏幕面积
android密度:160DPI密度系数是1
package com.myclover.file.service;
import android.content.Context;
import android.os.Environment;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class FileHelper {
private Context context;
private String SDPATH;
private String FILESPATH;
public FileHelper(Context context) {
this.context = context;
SDPATH = Environment.getExternalStorageDirectory().getPath() + "\\";
FILESPATH = this.context.getFilesDir().getPath() + "\\";
}
/**
* 在SD卡上创建文件
*
* @throws IOException
*/
public File creatSDFile(String fileName) throws IOException {
File file = new File(SDPATH + fileName);
file.createNewFile();
return file;
}
/**
* 删除SD卡上的文件
*
* @param fileName
*/
public boolean delSDFile(String fileName) {
File file = new File(SDPATH + fileName);
if (file == null || !file.exists() || file.isDirectory())
return false;
file.delete();
return true;
}
/**
* 在SD卡上创建目录
*
* @param dirName
*/
public File creatSDDir(String dirName) {
File dir = new File(SDPATH + dirName);
dir.mkdir();
return dir;
}
/**
* 删除SD卡上的目录
*
* @param dirName
*/
public boolean delSDDir(String dirName) {
File dir = new File(SDPATH + dirName);
return delDir(dir);
}
/**
* 修改SD卡上的文件或目录名
*
* @param fileName
*/
public boolean renameSDFile(String oldfileName, String newFileName) {
File oleFile = new File(SDPATH + oldfileName);
File newFile = new File(SDPATH + newFileName);
return oleFile.renameTo(newFile);
}
/**
* 拷贝SD卡上的单个文件
*
* @param path
* @throws IOException
*/
public boolean copySDFileTo(String srcFileName, String destFileName)
throws IOException {
File srcFile = new File(SDPATH + srcFileName);
File destFile = new File(SDPATH + destFileName);
return copyFileTo(srcFile, destFile);
}
/**
* 拷贝SD卡上指定目录的所有文件
*
* @param srcDirName
* @param destDirName
* @return
* @throws IOException
*/
public boolean copySDFilesTo(String srcDirName, String destDirName)
throws IOException {
File srcDir = new File(SDPATH + srcDirName);
File destDir = new File(SDPATH + destDirName);
return copyFilesTo(srcDir, destDir);
}
/**
* 移动SD卡上的单个文件
*
* @param srcFileName
* @param destFileName
* @return
* @throws IOException
*/
public boolean moveSDFileTo(String srcFileName, String destFileName)
throws IOException {
File srcFile = new File(SDPATH + srcFileName);
File destFile = new File(SDPATH + destFileName);
return moveFileTo(srcFile, destFile);
}
/**
* 移动SD卡上的指定目录的所有文件
*
* @param srcDirName
* @param destDirName
* @return
* @throws IOException
*/
public boolean moveSDFilesTo(String srcDirName, String destDirName)
throws IOException {
File srcDir = new File( srcDirName);
File destDir = new File( destDirName);
return moveFilesTo(srcDir, destDir);
}
/**********************************************************************************************************/
/*********************************************************************************************************/
/**
* 删除一个文件
*
* @param file
* @return
*/
public boolean delFile(File file) {
if (file.isDirectory())
return false;
return file.delete();
}
/**
* 删除一个目录(可以是非空目录)
*
* @param dir
*/
public boolean delDir(File dir) {
if (dir == null || !dir.exists() || dir.isFile()) {
return false;
}
for (File file : dir.listFiles()) {
if (file.isFile()) {
file.delete();
} else if (file.isDirectory()) {
delDir(file);// 递归
}
}
dir.delete();
return true;
}
/**
* 拷贝一个文件,srcFile源文件,destFile目标文件
*
* @param path
* @throws IOException
*/
public boolean copyFileTo(File srcFile, File destFile) throws IOException {
if (srcFile.isDirectory() || destFile.isDirectory())
return false;// 判断是否是文件
FileInputStream fis = new FileInputStream(srcFile);
FileOutputStream fos = new FileOutputStream(destFile);
int readLen = 0;
byte[] buf = new byte[1024];
while ((readLen = fis.read(buf)) != -1) {
fos.write(buf, 0, readLen);
}
fos.flush();
fos.close();
fis.close();
return true;
}
/**
* 拷贝目录下的所有文件到指定目录
*
* @param srcDir
* @param destDir
* @return
* @throws IOException
*/
public boolean copyFilesTo(File srcDir, File destDir) throws IOException {
if (!srcDir.isDirectory() || !destDir.isDirectory())
return false;// 判断是否是目录
if (!destDir.exists())
return false;// 判断目标目录是否存在
File[] srcFiles = srcDir.listFiles();
for (int i = 0; i < srcFiles.length; i++) {
if (srcFiles[i].isFile()) {
// 获得目标文件
File destFile = new File(destDir.getPath() + "\\"
+ srcFiles[i].getName());
copyFileTo(srcFiles[i], destFile);
} else if (srcFiles[i].isDirectory()) {
File theDestDir = new File(destDir.getPath() + "\\"
+ srcFiles[i].getName());
copyFilesTo(srcFiles[i], theDestDir);
}
}
return true;
}
public boolean myCopyFilesTo(File srcDir, File destDir) throws IOException {
boolean isSuccess = true;
if (!destDir.exists())
isSuccess = destDir.mkdirs();
if (!isSuccess)
return false;// 判断目标目录是否存在
if (!srcDir.isDirectory() || !destDir.isDirectory())
return false;// 判断是否是目录
File[] srcFiles = srcDir.listFiles();
for (int i = 0; i < srcFiles.length; i++) {
if (srcFiles[i].isFile()) {
// 获得目标文件
File destFile = new File(destDir.getPath() + "\\" + srcFiles[i].getName());
copyFileTo(srcFiles[i], destFile);
} else if (srcFiles[i].isDirectory()) {
File theDestDir = new File(destDir.getPath() + "\\" + srcFiles[i].getName());
if (!theDestDir.exists()) {
theDestDir.mkdirs();
}
myCopyFilesTo(srcFiles[i], theDestDir);
}
}
return true;
}
/**
* 移动一个文件
*
* @param srcFile
* @param destFile
* @return
* @throws IOException
*/
public boolean moveFileTo(File srcFile, File destFile) throws IOException {
boolean iscopy = copyFileTo(srcFile, destFile);
if (!iscopy)
return false;
delFile(srcFile);
return true;
}
/**
* 移动目录下的所有文件到指定目录
*
* @param srcDir
* @param destDir
* @return
* @throws IOException
*/
public boolean moveFilesTo(File srcDir, File destDir) throws IOException {
if (!srcDir.isDirectory() || !destDir.isDirectory()) {
return false;
}
File[] srcDirFiles = srcDir.listFiles();
for (int i = 0; i < srcDirFiles.length; i++) {
if (srcDirFiles[i].isFile()) {
File oneDestFile = new File(destDir.getPath() + "\\"
+ srcDirFiles[i].getName());
moveFileTo(srcDirFiles[i], oneDestFile);
delFile(srcDirFiles[i]);
} else if (srcDirFiles[i].isDirectory()) {
File oneDestFile = new File(destDir.getPath() + "\\"
+ srcDirFiles[i].getName());
moveFilesTo(srcDirFiles[i], oneDestFile);
delDir(srcDirFiles[i]);
}
}
return true;
}
}
根据SDK的文档,我们可以发现UIBbarButtonItem有如下几种初始化的方法:
-initWithTitle
-initWithImage
-initWithBarButtonSystemItem
-initWithCustomView
SystemItem主要有:
UIBarButtonSystemItemDone,
UIBarButtonSystemItemCancel,
UIBarButtonSystemItemEdit,
UIBarButtonSystemItemSave,
UIBarButtonSystemItemAdd,
UIBarButtonSystemItemFlexibleSpace,
UIBarButtonSystemItemFixedSpace,
UIBarButtonSystemItemCompose,
UIBarButtonSystemItemReply,
UIBarButtonSystemItemAction,
UIBarButtonSystemItemOrganize,
UIBarButtonSystemItemBookmarks,
UIBarButtonSystemItemSearch,
UIBarButtonSystemItemRefresh,
UIBarButtonSystemItemStop,
UIBarButtonSystemItemCamera,
UIBarButtonSystemItemTrash,
UIBarButtonSystemItemPlay,
UIBarButtonSystemItemPause,
UIBarButtonSystemItemRewind,
UIBarButtonSystemItemFastForward,
4:使用initWithCustomView
A>加一个开关switch:
[myToolBarItems addObject:[[[UIBarButtonItem alloc] initWithCustomView:[[[UISwitch alloc] init]
autorelease]];