问题描述
这个问题可能被问了 1000 多次,我仍然在这里感到困惑,这将是正确的方法吗?当我用谷歌搜索时,我发现了一些相关的链接 、 、 等。我发现的解决方案是在 xml 设计中使用相对布局。所有布局都将在 layout-folder(如果您正在创建手机应用程序)中,并且尺寸应在 dimens.xml(位于 values-mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi 文件夹中)中给出,以支持所有屏幕。
我如何为图像视图提供 marginTop。我正在做这样的计算:in ratios (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>
1楼
我如何为图像视图提供 marginTop。我正在做这样的计算:in ratios (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 :Density-independent Pixels - 基于屏幕物理密度的抽象单位。 这些单位相对于 160 dpi(每英寸点数)屏幕,在该屏幕上 1dp 大致等于 1px。 在更高密度的屏幕上运行时,用于绘制 1dp 的像素数会按适合屏幕 dpi 的系数放大。 同样,当在较低密度的屏幕上时,用于 1dp 的像素数会按比例缩小。
有关更多详细信息,
因此,根据您的示例,让 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的优势,你
sp 类似于 dp; 但它用于字体大小的上下文中,原因请参考尺寸单位文档
尺寸应在 dimens.xml(在 values-mdpi、hdpi、xhdpi、xxhdpi、xxxhdpi 文件夹中)中给出,以支持所有屏幕。
再次谈到这个维度,你不应该做 values-mdpi、hdpi...等等。因为如果你使用单位 dp 那么它与前面提到的屏幕密度无关。
如果您使用单位 px,那么您可以选择 values-mdpi、values-hpdi...等等,但这又会成为手动计算的开销,并且可能会因获取不需要的值而导致错误。
因此,最好dimesnion 值仅在屏幕尺寸方面而不是在屏幕密度方面有所延迟。 因此您的布局或值文件夹可以按照 Android OS(API) 版本,屏幕尺寸像正常、大或如链接 1、链接 2 和 Eenvicible 的评论中所述
基于评论的更新
如果你经历了那么你就会意识到
对于布局,我们有文件夹结构 layout-normal、layout-large、layout-large-land……但这可能会有所不同
在同一个链接中,您可以看到 drawable-mdpi.. 等等。
这里我们使用的图像通常不是密度独立的,所以我们需要不同密度的相同图像,我们相应地将其添加到文件夹中
对于值,我们有文件夹结构,如值、值-fr,以防您
关于 values-mdpi,values-hpdi 我已经在上面解释过了。
请正确浏览每个链接..bcoz 我指的只是官方文档
2楼
是的,您的 dimens.xml 文件中的值完全错误。 请删除所有不同的 dimens.xml。 当您使用图像编辑器编辑实际图像时,不同的密度适用于它们。
如果您想在图像周围留出边距,请使用带或布局的线性布局,但不要使用 dps。 加权线性布局或相对布局更加灵活。
但是,如果您确实选择了 dps,我也不建议这样做,知道在您的 dimens.xml 中设置一组测量值就足够了。
理想情况下,不要创建比您需要的更多的 xml 布局/尺寸变化。 如果需要,您可以调整它们,但在开始添加更多限定符之前,请确保您正在解决实际问题。
3楼
为什么不使用权重进行布局。 在图像上方有一个空白视图并根据您的要求对其进行加权,它将自动拉伸。 你可以在找到例子
或者像这样尝试。 根据您对空白布局的需要赋予空间权重
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="1">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/holo_green_dark"
android:layout_weight="0.2"
android:id="@+id/view1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/ic_register"
android:layout_weight="0.8"
/>
</LinearLayout>
</RelativeLayout>