android手機的螢幕尺寸問題一直是讓開發人員感覺很頭疼的問題,由於各手機廠商所採用的螢幕尺寸不同,user UI介面呈現及布局自然也各自迥異。所以,在開發android手機應用程式時,除了對底層API的掌握之外,最重要的仍是螢幕解析度概念的理解。
android可設定為隨著視窗大小調整縮放比例,但即便如此,手機程式設計人員還是必須清楚地知道手機螢幕的邊界,以免縮放之後造成的布局(Layout)變形問題。在android中,只需幾行代碼就可以取得手機螢幕解析度,其中的關鍵則是DisplayMetrics類的應用。
DisplayMetrics類直接繼承自Object類,存放在Android.util包下。DisplayMetrics對象記錄了一些常用的資訊,包含了顯示資訊、大小、維度和字型等,如下表所示:
static int DEFAULT_DENSITY
The reference density used throughout the system.
float density
The logical density of the display.
int heightPixels
The absolute height of the display in pixels.
float scaledDensity
A scaling factor for fonts displayed on the display.
int widthPixels
The absolute width of the display in pixels.
float xdpi
The exact physical pixels per inch of the screen in the X dimension.
float ydpi
The exact physical pixels per inch of the screen in the Y dimension.
值得一提的是,widthPixels和heightPixels記錄了手機螢幕的寬和高,我們使用這兩個值便可得到手機螢幕解析度。注意此處的像素指的是絕對(Absolute)像素,而非相對像素。
下面是擷取螢幕解析度的代碼:
[java] public class MainActivity extends Activity
{
private TextView text=null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
this.text=(TextView)super.findViewById(R.id.text);
DisplayMetrics dm=new DisplayMetrics();
super.getWindowManager().getDefaultDisplay().getMetrics(dm);
String strOpt="手機螢幕解析度為:"+dm.widthPixels+"*"+dm.heightPixels;
this.text.setText(strOpt);
}
}
public class MainActivity extends Activity
{
private TextView text=null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
super.setContentView(R.layout.activity_main);
this.text=(TextView)super.findViewById(R.id.text);
DisplayMetrics dm=new DisplayMetrics();
super.getWindowManager().getDefaultDisplay().getMetrics(dm);
String strOpt="手機螢幕解析度為:"+dm.widthPixels+"*"+dm.heightPixels;
this.text.setText(strOpt);
}
}
布局檔案非常簡單,一個TextView組件即可:
[html] <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</RelativeLayout>
程式運行效果: