Android 在不同密度上使用dp和sp存在问题
我在不同密度上测试了一个简单的布局。以下是Android 在不同密度上使用dp和sp存在问题,android,android-layout,layout,screen,Android,Android Layout,Layout,Screen,我在不同密度上测试了一个简单的布局。以下是activity\u main.xml的布局xml代码: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="matc
activity\u main.xml
的布局xml代码:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="32dp"
tools:context="com.noah.densitytest.MainActivity"
android:background="@color/gray" >
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:padding="4dp"
android:background="#000000" >
<TextView
android:id="@+id/tv1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:textSize="16sp"
android:layout_marginTop="32dp"
android:background="@color/algea_green" />
<View
android:id="@+id/square_top"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_marginLeft="16dp"
android:layout_toRightOf="@id/tv1"
android:background="@color/aqua" />
<View
android:id="@+id/square_center"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_centerInParent="true"
android:layout_marginRight="32dp"
android:background="@color/blue" />
<View
android:layout_width="32dp"
android:layout_height="256dp"
android:layout_centerVertical="true"
android:layout_toRightOf="@id/square_center"
android:background="@color/dark_slate_blue" />
<View
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_toRightOf="@id/square_top"
android:layout_marginLeft="48dp"
android:layout_marginTop="128dp"
android:background="@color/medium_purple" />
</RelativeLayout>
</RelativeLayout>
我只是把它放在一个文件夹里——res/layout
我使用了dp,据说它与密度无关,Android会自动缩放这个单位中给定的值。但是,问题是布局在每个密度上的显示方式不同。我使用了mdpi、hdpi、xhdpi和xxhdpi AVD。但所有其他属性都是8in、1280x720、正常、长的,适用于所有测试设备。那么,为什么它们看起来不同呢?从另一个角度看,它真的很难看。我还尝试将其复制到特定文件夹,如layout mdpi、layout hdpi等,但结果仍然相同
但是,如果我使用px作为单元,那么所有设备上的布局看起来都一样。为什么使用px看起来更好
我希望你能向我解释这一点,或者能给我提供好的链接,让我能够深入理解Android是如何做到这一点的,以及为什么dp比px更受推荐,而px恰恰相反
结果如下:
这并不总是能正常工作。您需要有单独的布局文件夹,以使其按您想要的方式工作。文件夹是 大布局 大面积土地布局 布局xlarge 大面积土地布局图 布局小 规划小型土地
你不需要所有这些文件夹,如果你不想,我倾向于省去小文件夹和布局xlarge土地。但是有了这些文件夹,Android将自动加载适用于您使用的屏幕大小的正确XML。大型布局将用于Nexus 7等设备 您混淆了密度、分辨率和物理尺寸 无论分辨率如何,
dip
/dp
或设备独立像素始终相同。在dip
/dp
中写入的所有单位均基于mdpi
,这是基线密度。每个密度的值为:
:160dpi(每英寸点数)mdpi
:231dpitvdpi
:240dpihdpi
:320dpixhdpi
dp
单元的物理尺寸/px
。该系数是其密度与mdpi的比值
示例:如果使用dp
装置,hdpi
装置将比mdpi
大1.5倍(240/160)xhdpi
设备将比mdpi
大2(320/160)倍
这意味着,如图所示,具有相同分辨率但不同密度的设备将具有不同的大小!密度越大,占用的空间就越大
相反,在恒定分辨率下使用px
时,每个密度都不会有差异,因为计算中不包括它
示例:对于具有(1280x720,mdpi)、(1280x720,hdpi)和(640480,xhdpi)的设备,16px是。。。嗯,16px
更多阅读:
layout small
,layout normal
,等等)或更灵活的“最小宽度”限定符(layout-sw600dp
,layout-sw720dp
等)。您可以在答案中的第一个链接上了解更多信息。至于@dimens
,您可能希望缩小尺寸,而不是更大,以达到更高的密度,尽管这有点违背了目的。您好,先生,我目前在WMS请求不透明度方面遇到问题,请在上提供帮助。谢谢:)