2014-06-16 166 views
2

好吧,我知道如果我想讓圖像和文本和按鈕不會在小設備中過於擠壓,也不會在巨型平板電腦中變得非常小,我可以創建每個設備都不同的資源文件和每個方向。Android與多個設備的兼容性

有沒有更簡潔的方法來做到這一點?即有沒有辦法讓我的所有資源都擁有一個單獨的文件夾,就像「屏幕比例因子」一樣,這樣每次我想編輯時,我都不必返回並更改30個不同的資源,然後檢查它們以確保它們都合適嗎?

謝謝

+0

我相信只要你理智地使用佈局,它會自動擴展。問題是,如果你炸掉低分辨率的圖像,它看起來像是像素化的,如果你縮小高分辨率的話,可能會讓機器處理太多 –

回答

2

您不必爲每個小部件創建不同的大小。

對於ButtonTextViewImageView(和任何其他Views),則可以在DP(密度無關的像素)中設置的android:layout_widthandroid:layout_height性質。

這個單位 - 正如我們從它的名字中可以猜出 - 獨立於屏幕的密度。這意味着每個屏幕上的結果都是一樣的。

您可能必須創建多種尺寸的唯一圖標是圖標。爲此,您必須遵循Android提供的有關不同密度之間比例的規則。欲瞭解更多信息,你可以看看this

您還可以在XML文件中創建圖標。這樣,它會自動適合每個屏幕。問題是,創建複雜圖標可能非常困難。

0

實際上,它對每個設備都有多個圖像,對於低端設備而言,加載500px並不像加載其實際需要的100px一樣。所以我建議在ImageView中使用scaleType並使用android_layout_widthandroid:layout_height內的維度調整您的UI。例如: android:layout_width="@dimen/size"並且您可以根據您的設備使用不同的大小。 另一種方式是把圖像drawable-nodpi和規模下運行因此這將始終修復形象,因爲你需要

public static int calculateInSampleSize(
      BitmapFactory.Options options, int reqWidth, int reqHeight) { 
    // Raw height and width of image 
    final int height = options.outHeight; 
    final int width = options.outWidth; 
    int inSampleSize = 1; 

    if (height > reqHeight || width > reqWidth) { 

     final int halfHeight = height/2; 
     final int halfWidth = width/2; 

     // Calculate the largest inSampleSize value that is a power of 2 and keeps both 
     // height and width larger than the requested height and width. 
     while ((halfHeight/inSampleSize) > reqHeight 
       && (halfWidth/inSampleSize) > reqWidth) { 
      inSampleSize *= 2; 
     } 
    } 

    return inSampleSize; 
} 

你可以看看在Android開發者指南進一步幫助縮放位圖高效 http://developer.android.com/training/displaying-bitmaps/load-bitmap.html