Android中dip、dp、sp、pt和px的區別


1、概述

        過去,程序員通常以像素為單位設計計算機用戶界面。例如:圖片大小為80×32像素。這樣處理的問題在於,如果在一個每英寸點數(dpi)更高的新顯示器上運行該程序,則用戶界面會顯得很小。在有些情況下,用戶界面可能會

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:orientation
="vertical"
android:padding
="3dip">


<!--0固定1可以擴展-->

<TableLayout
android:layout_width="fill_parent"
android:layout_height
="wrap_content"
android:numColumns
="8"
android:shrinkColumns
="0"
android:stretchColumns
="1">

<TableRow
android:layout_width="fill_parent"
android:layout_height
="wrap_content">

<TextView
android:id="@+id/label"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="請輸入用戶名:" />
<!-- 這個EditText放置在上邊id為label的TextView的下邊 -->
<EditText
android:id="@+id/username"
android:layout_width
="fill_parent"
android:layout_height
="wrap_content"
android:layout_below
="@id/label"
android:background
="@android:drawable/editbox_background" />

</TableRow>


<TableRow
android:layout_width="wrap_content"
android:layout_height
="match_parent">


</TableRow>


</TableLayout>


<Button android:layout_width="800px"
android:layout_height
="200px"
android:text
="800px"/>

<Button android:layout_width="400dip"
android:layout_height
="100dip"
android:text
="400dip"/>
</LinearLayout>
package com.example.yanlei.my2;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView pTextView
=(TextView)findViewById(R.id.label);

// 獲取屏幕密度(方法1)
int screenWidth = getWindowManager().getDefaultDisplay().getWidth(); // 屏幕寬(像素,如:480px)
int screenHeight = getWindowManager().getDefaultDisplay().getHeight(); // 屏幕高(像素,如:800p)

String str
= " getDefaultDisplay ,screenWidth=" + screenWidth + "; screenHeight=" + screenHeight+"\n";

// 獲取屏幕密度(方法2)
DisplayMetrics dm = new DisplayMetrics();
dm
= getResources().getDisplayMetrics();

float density = dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
int densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
float xdpi = dm.xdpi;
float ydpi = dm.ydpi;

str
=str + " DisplayMetrics, xdpi=" + xdpi + "; ydpi=" + ydpi+"\n";
str
=str + " DisplayMetrics, density=" + density + "; densityDPI=" + densityDPI+"\n";

screenWidth
= dm.widthPixels; // 屏幕寬(像素,如:480px)
screenHeight = dm.heightPixels; // 屏幕高(像素,如:800px)

str
=str + " DisplayMetrics screenWidth=" + screenWidth + "; screenHeight=" + screenHeight+"\n";

// 獲取屏幕密度(方法3)
dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);

density
= dm.density; // 屏幕密度(像素比例:0.75/1.0/1.5/2.0)
densityDPI = dm.densityDpi; // 屏幕密度(每寸像素:120/160/240/320)
xdpi = dm.xdpi;
ydpi
= dm.ydpi;

str
=str + " DisplayMetrics xdpi=" + xdpi + "; ydpi=" + ydpi+"\n";
str
=str + " DisplayMetrics, density=" + density + "; densityDPI=" + densityDPI+"\n";

int screenWidthDip = dm.widthPixels; // 屏幕寬(dip,如:320dip)
int screenHeightDip = dm.heightPixels; // 屏幕寬(dip,如:533dip)

str
=str + " DisplayMetrics screenWidthDip=" + screenWidthDip + "; screenHeightDip=" + screenHeightDip+"\n";

screenWidth
= (int)(dm.widthPixels * density + 0.5f); // 屏幕寬(px,如:480px)
screenHeight = (int)(dm.heightPixels * density + 0.5f); // 屏幕高(px,如:800px)

str
=str + " DisplayMetrics screenWidth=" + screenWidth + "; screenHeight=" + screenHeight+"\n";
pTextView.setText(str);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}
}

 

小到難以看清內容。由此我們采用與分辨率無關的度量單位來開發程序就能夠解決這個問題。Android應用開發支持不同的度量單位。

2、度量單位含義

      dip: device independent pixels(設備獨立像素). 不同設備有不同的顯示效果,這個和設備硬件有關,一般我們為了支持WVGA、HVGA和QVGA 推薦使用這個,不依賴像素。 

     dp: dip是一樣的

     px: pixels(像素). 不同設備顯示效果相同,一般我們HVGA代表320x480像素,這個用的比較多。

     pt: point,是一個標准的長度單位,1pt=1/72英寸,用於印刷業,非常簡單易用;
     sp: scaled pixels(放大像素). 主要用於字體顯示best for textsize。

    in(英寸):長度單位。 
    mm(毫米):長度單位。


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com