2011年6月30日 星期四

利用 getDisplayMetrics 調整元件尺寸

在 android 的專案 res 資料夾中…有 drawable-hdpi、mdpi、ldpi 等資料夾…
在文件中的以下文件有提到系統會根據裝置的 Dpi 值預設使用哪個資料夾的檔案…

http://developer.android.com/guide/practices/screens_support.html

以在 drawable-mdpi 的一個 Layout.xml 中的 ImageView 為例…
若我們在以下列方式定義 ImageView


<ImageView android:layout_width="300dp" android:layout_height="300dp" />


且該專案於符合 hdpi 條件的裝置上執行時會主動將 300 乘上某個值…
如此可以讓整體畫面等比例擴大…解決在不同解析度下變型的狀況…

但若這個 ImageView 是動態 new 出來的,並指定長寬為 300dp


ImageView img = new ImageView();
img.setLayoutParams(new LayoutParams(300, 300));


如此並不會像寫在 Layout.xml 中一樣得到自動的縮放效果…

若需要縮放效果,必須查詢該裝置 Dpi 與 mdpi 的差異並自行相乘,例如


ImageView img = new ImageView();
final float scale = getResources().getDisplayMetrics().density;
int size = (int)(300 * scale);
img.setLayoutParams(new LayoutParams(size, size));


如此即能達到 Layout 不依裝置 Dpi 值變型的效果。

沒有留言:

張貼留言