2012-08-06

Android的DisplayMetrics類別應用 - 取得螢幕尺寸

Android一個最讓開發者頭大的問題,就是手機的螢幕尺寸太雜、大小太多

造成開發者在開發應用程式上的難度,要兼顧每一個尺寸是讓人頗頭大

現在介紹使用DisplayMetrics類別取得手機螢幕尺寸大小,以改變控制元件

來配合螢幕尺寸。

main.xml
<?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="fill_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/TextView01"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:ems="10"
        android:inputType="textMultiLine"
        android:singleLine="false" >

        <requestFocus />

    </EditText>

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

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:layout_marginRight="60dp"
            android:text="@android:string/cancel" />

        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="60dp"
            android:text="@android:string/ok" />

    </RelativeLayout>

</LinearLayout>

我先設定螢幕尺寸為2.7寸,中間EditText高度為300dp


執行後的畫面,因為實際螢幕比較大,所以程式小了一號


使用DisplayMetrics類別取得螢幕尺寸大小改變控制項尺寸大小以符合實際螢幕大小

DemoGetScreenActivity.java
package jim.demo.getscreen;

import android.app.Activity;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.EditText;
import android.widget.TextView;

public class DemoGetScreenActivity extends Activity {
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        DisplayMetrics metrics = new DisplayMetrics();  
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        
        TextView TextView1 = (TextView)findViewById(R.id.TextView01);
        TextView1.setText("手機螢幕大小為 "+metrics.widthPixels+" X "+metrics.heightPixels);
        
        
        EditText editText1 = (EditText)findViewById(R.id.editText1);
        
        //原QVGA 2.7吋螢幕解析度為240 * 320
        if(metrics.heightPixels > 320)
        {
        	//改變editText1的高度
        	editText1.getLayoutParams().height = 600;
        }
          
    }
}

改變後執行畫面


官方螢幕尺寸和解析度對照表



後記:

          android的螢幕尺寸是個很麻煩的問題,因為不像Apple的iphone一樣只有單一尺寸

每一家Android廠商就有不同的尺寸,所以開發時就只有靠著DisplayMetrics抓取的螢幕

尺寸來做適度的調整,正常來說抓最小尺寸(QVGA)、大尺寸(WVGA)、平板尺寸(WXGA)

三種來做測試就好,只要不會出現按不到鈕的情況就可以了,不然要寫完整的全部尺寸

調整是要花費不少時間的,以上給大家參考,感謝。
       
         

沒有留言:

張貼留言

您的寶貴建議是我前進的動力!