[英]how to set final size(50dp) for an imageView so that it looks same size on any android device screen
嗨,我有一個包含應用程序圖標的可繪制對象。應用程序圖標在runtime
過程中存儲在可繪制對象中,然后使用ImageView
設置該可繪制對象。 但是,根據設備上我的應用程序running.I已設定的寬度和高度的應用程序圖標的大小變化imageView
在XML作為50dp和也用這種代碼:
image.setAdjustViewBounds(true);
image.setMaxHeight(50);
image.setMaxWidth(50);
image.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
但事與願違worked.So我怎么可以設置為我的最終大小(50dp) imageView
,這樣它可以在任何Android設備屏幕上相同尺寸的出現。
在xml
文件中設置寬度和高度就足夠了。 您無需以編程方式進行設置。
如果您這樣設置寬度和高度
image.setMaxHeight(50);
image.setMaxWidth(50);
值50以像素為單位,而不是dp。 由於設備的dpi不同,尺寸為50x50像素的圖像在不同的設備中看起來會有所不同。
項目中有文件夾mdpi,hdpi,xhpdi和xxhdpi。 如果要以50dp顯示圖像,則必須生成其他文件:
這是因為mdpi 1 px = 1 dp,hdpi 1dp = 1.5 px,xhdpi 1dp = 2px和xxhdpi 1dp = 3px
更新您只可以生成一張大小為150x150像素的圖像,並將其放在文件夾xxhdpi中。 應用程序將自動縮放圖像以適合其他密度。
通過做
image.setMaxHeight(50);
image.setMaxWidth(50);
您正在以pixels
設置width
和height
。 對於不同的設備,隨着重新溶解度的變化,外觀將不一樣,因此您需要將這些值設置為與density independent pixels(dp)
。 使用以下方法根據設備density
將單位從dp
轉換為pixels
。
public final class DimensionUtils {
private static boolean isInitialised = false;
private static float pixelsPerOneDp;
// Suppress default constructor for noninstantiability.
private DimensionUtils() {
throw new AssertionError();
}
private static void initialise(View view) {
pixelsPerOneDp = view.getResources().getDisplayMetrics().densityDpi / 160f;
isInitialised = true;
}
public static float pxToDp(View view, float px) {
if (!isInitialised) {
initialise(view);
}
return px / pixelsPerOneDp;
}
public static float dpToPx(View view, float dp) {
if (!isInitialised) {
initialise(view);
}
return dp * pixelsPerOneDp;
}
}
您可以使用TypedValue
根據提供的dp
獲取px
值:
int px = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DP, 50, getResources().getDisplayMetrics());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.