我正在根据官方谷歌文档为不同的设备设置图像。根据谷歌文档,我们应该始终使用 dp(密度独立像素),因为不同设备的像素可能会有所不同。所以我按照 dp(密度独立像素)管理图像。我已将图像放入可绘制的 xhdpi、hdpi、mdpi 和 ldpi 中。它适用于大多数设备,但对于不同的设备,ppi 像素可能因设备而异,因此 dp(密度独立像素)不是固定的,因此我根据 dp(密度独立像素)进行的所有计算都会出错并且无法正确设置。
让我用例子来解释一下。这是我正在设置的 xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ll_footer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FF0000"
android:orientation="horizontal" >
<ImageView
android:id="@+id/ft_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:src="@drawable/ico_test" />
<ImageView
android:id="@+id/ft_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:src="@drawable/ico_test" />
<ImageView
android:id="@+id/ft_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:src="@drawable/ico_test" />
<ImageView
android:id="@+id/ft_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:src="@drawable/ico_test" />
<ImageView
android:id="@+id/ft_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:src="@drawable/ico_test" />
<ImageView
android:id="@+id/ft_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:src="@drawable/ico_test" />
</LinearLayout>
当我在 Micromax 画布 4(294 ppi 像素)中看到这种布局时,它看起来很完美。但在 Google Nexus 4(318 ppi 像素)中,它会从右侧留下更多空间(您可以在我附加的图像中看到它。)。
我试图获取以下详细信息
density :
dpHeight :
dpWidth :
使用下面的java代码:
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics outMetrics = new DisplayMetrics ();
display.getMetrics(outMetrics);
float density = getResources().getDisplayMetrics().density;
float dpHeight = outMetrics.heightPixels / density;
float dpWidth = outMetrics.widthPixels / density;
我得到 nexus 4 和 canvas 4 的以下结果:
(canvas 4)
density : 2.0
dpHeight : 640
dpWidth : 360
(nexus 4)
density : 2.0
dpHeight : 592
dpWidth : 384
正如您在这里看到的,dp(密度独立像素)因这些设备而异,我认为这是因为 ppi 像素不同,所以我根据 dp(密度独立像素)进行的所有计算都出错了。那么如果 dp 不固定,我该如何管理图像。??
我还附上了图像在画布 4 和 nexus 4 中的布局外观的屏幕截图。
我还提到了这个问题How do I convert ppi into dpi for Android images?
我知道我可以使用布局权重调整布局,但我认为必须有另一种解决方案来解决这个问题。
请查看并帮助我解决问题。