这个问题可能被问了1000多次,我还是很困惑,这是正确的方法吗?当我在Google上搜寻时,发现了一些相关的链接link1link2link3等。 xml设计中的相对布局。所有布局都将位于layout-folder(如果您正在创建电话应用程序),尺寸应在dimens.xml中指定(位于值-mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi文件夹中)支持所有屏幕。

我如何给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中,
values-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>

最佳答案

我如何给marginTop提供图像视图。
  比例
  (1:1.5:2:3:4)-(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi)-(10dp-15dp-20dp-30dp-40dp)。
  我的方法是正确的还是?


尺寸比例(1:1.5:2:3:4)-(mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi)是正确的,但不适用于dp / dip尺寸单位...适用于px


  dp:与密度无关的像素-基于像素的抽象单位
  屏幕的物理密度。这些单位相对于160 dpi
  (点数/英寸)屏幕,其1dp大致等于1px。什么时候
  在更高密度的屏幕上运行时,用于绘制的像素数
  1dp按适合屏幕dpi的比例放大。
  同样,在较低密度的屏幕上,使用的像素数
  1dp会按比例缩小。


有关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在这种情况下看起来会很小。

为了获得Dip / dp优于px的优势,您can refer here

sp与dp相似;但是它用于字体大小的上下文中,原因是请参考尺寸单位文档

You can also refer the converter here


  尺寸应在dimens.xml(位于
  值-mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi文件夹)以支持所有屏幕。


再次提到尺寸问题时,您不应执行值-mdpi,hdpi ...等。因为使用单位dp,则它与屏幕密度无关,如上所述。
如果使用单位px,则可以使用值-mdpi,值-hpdi ...等,但是这又将成为手动计算的开销,并可能由于获取不需要的值而导致错误。

因此,最好将二维数值仅在屏幕尺寸方面而不在屏幕密度方面推迟。因此您的layout或values文件夹可以按照Android OS(API)版本进行设置,并且屏幕大小可以像普通,大屏幕一样,也可以按照link1,link2和Eenvicible的注释中所述

根据评论更新
如果通过Supporting Different Screens,您将意识到对于布局,我们具有文件夹结构layout-normal,layout-large,layout-large-land ...但是同样,它可能有所不同在同一链接中您可以看到drawable-mdpi。等等。在这里,我们使用的图像通常不是密度无关的,因此我们需要不同密度的相同图像,因此我们将其相应地添加到文件夹中,以获取具有诸如值的值的文件夹结构,如果您Supporting Different Language,则为values-fr
关于values-mdpi,values-hpdi我已经在上面解释过了。

请正确浏览每个链接。.bcoz我仅指官方文档

关于android - 如何在android中创建应支持所有设备的布局?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33210975/

10-09 01:06