我目前正在尝试调整我的Android应用,以便在多个屏幕/设备上看起来和感觉类似。
我现在知道,其中的一个主要部分是根据mdpi,hdpi,xhpi,xxhdpi和xxxhdpi的x1,x1.5,x2,x3,x4比率为每个图像文件提供多个图像尺寸,我今天已经完成了这件事。
执行此操作后,我在@ dimen.xml值资源中定义了Density independent Pixel
维度,这些维度与MDPI资源的实际图像大小(以像素为单位)相对应。随后,我将问题的layout_width
和layout_height
中的图像视图设置为此维度。
然而,我目前不知道为什么我的应用程序在MDPI仿真器上看起来仍然与在HDPI仿真器上看起来明显不同。为了突出我的意思,我将提供以下屏幕截图,显示HDPI和MPDI仿真器彼此相邻(左边是HDPI(4" WVGA Nexus S
),右边是MDPI(5.4" FWVGA
))。我希望它们看起来都像MPDI版本,但到目前为止我所做的显然不起作用。
我有三种理论可以解释为什么这不符合我的意图:
1。我不应该将ImageView layout_width
和layout_height
设置为dp值,而是match_parent
或wrap_content
(? )(并在过程中更改我的.xml布局的结构)。
2. 我不仅要定义多个可绘制资源,还要为不同的屏幕尺寸定义多个布局资源(?)。
3。我误解了这应该如何运作的整个想法(?)。
我还将举例说明第一个屏幕截图中可以看到的列表项之一(@drawable/phone_speed_icon
是MPDI中的64 x64
像素资源和96x96
资源HDPI,@dimen/icon_attribute_size
为64dp
):
<LinearLayout
android:id="@+id/llSpeed_PreSession"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingBottom="10dp"
android:paddingEnd="20dp"
android:paddingStart="20dp"
android:weightSum="100">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="@dimen/icon_attribute_size"
android:layout_weight="20"
android:weightSum="100">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="70"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="@dimen/icon_attribute_size"
android:layout_height="@dimen/icon_attribute_size"
android:src="@drawable/phone_speed_icon" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="30"
android:gravity="center_vertical"
android:paddingStart="10dp"
android:text="Speed"
android:textAppearance="@android:style/TextAppearance.Large"
android:textColor="#878787"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="80"
android:gravity="center">
<android.support.v7.widget.SwitchCompat
android:id="@+id/swSpeed_PreSession"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
</LinearLayout>
</LinearLayout>
最后,我有四个问题需要回答:
1. 如何使屏幕截图1中的列表项在MDPI设备上与HDPI设备看起来相同?这与我前面提到的三种理论中的一种有什么关系吗?
2. 为什么标题文字(“你想测量什么?”)包装在一台设备上,而不是另一台设备上?他们使用sp
单位(通过android:style/TextApperance.TextApperance.Large
)?
3。 HDPI设备(如果有的话)不应该更多地间隔而不是间隔更小? HDPI仿真器看起来好像“可用的像素更少”,如果你能理解我所说的甚至一点点。
4. 如何让第二张截图上的碎片看起来一样?或者我甚至不想要这个,因为HDPI(由于某种原因)在物理上更小,这就是为什么布局不那么分散?
无论如何,我一整天都在这里,而且我读的越多,我得到的就越混乱,所以非常感谢任何帮助!
答案 0 :(得分:1)
您可以根据各种因素创建多个dimens.xml
文件。在这里,您将根据屏幕宽度了解Android Studio中各种dimens.xml
文件的当前项目。
但是,您可以对所需的每个dimens
文件有不同的要求。例如,您可以为每个密度创建dimens
个文件: