这个问题可能被问了超过1000次,我仍然很困惑,哪个才是正确的方法?当我用Google搜索时,我发现了一些相关链接link1 , link2 , link3等等。我发现的解决方案是在 xml 设计中使用相对布局。所有布局都将位于布局文件夹中(如果您正在创建手机应用程序),并且尺寸应在dimens.xml中给出(位于值-mdpi,hdpi, xhdpi、xxhdpi、xxxhdpi 文件夹)支持所有屏幕。
我如何为 ImageView 提供 marginTop。我正在做这样的计算:比率 (1:1.5:2:3:4)-(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi)-(10dp-15dp-20dp-30dp-40dp)。 我的做法是否正确?
我在drawable-(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi)文件夹中给出了不同分辨率的不同图像。
我的问题在values-mdpi/dimens.xml-margintop-10dp中, value-hdpi/dimens.xml-margintop-15dp、values-xhdpi/dimens.xml-margintop-20dp 等。以(1 : 1.5 : 2 : 3 : 4)的比例给出不同屏幕的尺寸值是否正确? 在 Main.xml 中:
<RelativeLayout
android:id="@+id/rl_submain"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ImageView
android:id="@+id/iv_papa"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="@dimen/s_mtop"
android:background="@drawable/papa1"
android:gravity="center"/>
<TextView
android:id="@+id/tv_power"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_marginBottom="@dimen/s_mbot"
android:textSize="12sp"
android:textColor="@color/white"
android:layout_alignParentBottom="true"
android:text="@string/poweredby"/>
</RelativeLayout>
<resources>
<!--Splash-->mdpi
<dimen name="s_mtop">10dp</dimen>
<dimen name="s_mbot">2dp</dimen>
<resources>
<!--Splash-->hdpi
<dimen name="s_mtop">15dp</dimen>
<dimen name="s_mbot">3dp</dimen>
<resources>
<!--Splash-->xhdpi
<dimen name="s_mtop">20dp</dimen>
<dimen name="s_mbot">4dp</dimen>
<resources>
<!--Splash-->xxhdpi
<dimen name="s_mtop">30dp</dimen>
<dimen name="s_mbot">6dp</dimen>
<resources>
<!--Splash-->xxxhdpi
<dimen name="s_mtop">40dp</dimen>
<dimen name="s_mbot">8dp</dimen>
最佳答案
how can i give marginTop for an image view.I am doing calculation like this:in ratios (1:1.5:2:3:4)-(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi)-(10dp-15dp-20dp-30dp-40dp). Whether my approach is correct or?
尺寸比 (1:1.5:2:3:4)-(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi) 是正确的,但不适用于尺寸单位 dp/dip...它适用于 px
dp :Density-independent Pixels - An abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi (dots per inch) screen, on which 1dp is roughly equal to 1px. When running on a higher density screen, the number of pixels used to draw 1dp is scaled up by a factor appropriate for the screen's dpi. Likewise, when on a lower density screen, the number of pixels used for 1dp is scaled down.
有关 different dimension unit refer doc 的更多详细信息
因此,按照您的示例,让 marginTop = 10dp 然后按照比例 (1:1.5:2:3:4)-(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi)-(10px-15px-20px- 30px-40px)
比意味着你也可以做 marginTop =10px 但它会保持 10px 。所以更高的 dpi 在这种情况下 marginTop 会看起来很小。
为了使 div/dp 优于 px,您 can refer here
sp与dp类似;但它在字体大小的上下文中使用,原因请参阅尺寸单位文档
You can also refer the converter here
dimensions should be given in dimens.xml(which is in values-mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi folders) to support all screen.
再次谈到尺寸,您不应该使用值 - mdpi、hdpi...等等。因为如果您使用单位 dp,那么它与前面提到的屏幕密度无关。
如果您使用单位px,那么您可以使用values-mdpi、values-hpdi...等等,但这又会成为手动计算的开销,并且可能会因获取不需要的值而引发错误。
因此,尺寸值最好仅根据屏幕尺寸而不是屏幕密度而变化。因此您的布局或值文件夹可以按照 Android 操作系统(API)版本,屏幕尺寸如正常、大或如 link1、link2 和 Eenvicible 的评论中提到的
根据评论进行更新
如果您通过Supporting Different Screens然后你会意识到
对于布局,我们有文件夹结构layout-normal、layout-large、layout-large-land...但这可能会有所不同
在同一个链接中,你可以看到drawable-mdpi ..等等。在这里,我们使用的图像通常与密度无关,因此我们需要不同密度的相同图像,并且我们将其相应地添加到文件夹中
对于值,我们具有像值、值-fr这样的文件夹结构,以防您 Supporting Different Language
关于values-mdpi,values-hpdi我上面已经解释过了。
请正确浏览每个链接。.bcoz 我仅指官方文档
关于android - 如何在android中创建一个支持所有设备的布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33210975/