0
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="@color/gray"
        android:orientation="vertical" > 

        <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@color/darkgray"
        android:gravity="center"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/attenders"
            android:layout_width="110dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
        android:background="@color/gray"
        android:layout_marginRight="8dp"
        android:text="Attenders" />

    <Button
        android:id="@+id/send"
        android:layout_width="110dp"
        android:layout_height="40dp"
        android:layout_marginLeft="8dp"
        android:layout_gravity="center"
        android:background="@color/gray"
        android:text="Send IM" />
    </LinearLayout>
</LinearLayout>

这是我的代码,但 dp 不适用于所有屏幕分辨率。建议PLZ,请告诉我如果我做错了什么

4

2 回答 2

6

问题是当我使用 dp 设置按钮的高度或宽度时,它并不适合所有分辨率,即在小屏幕上它看起来很大而在大屏幕上它看起来很小,而我知道当我们使用 dp 来设置高度和它根据屏幕分辨率自动转换/调整的任何组件的宽度

我从中了解到的是,您认为使用dp代替px(或in,或cm)会神奇地工作,这样它们在所有设备上都将具有相同的物理尺寸,而不管该设备的密度(ppi)如何。

事实并非如此。

dp 或 dip,如这里所解释的,是

基于屏幕物理密度的抽象单位。这些单位是相对于 160 dpi(每英寸点数)的屏幕而言的,在该屏幕上 1dp 大致等于 1px。

与具有 160dpi 的屏幕相比,具有更多 dpi 的屏幕(更密集,意味着更多的像素被打包到屏幕的正方形区域中)本质上将绘制物理上更小的图像,例如 100x100 dp 图像。

在更高密度的屏幕上运行时,用于绘制 1dp 的像素数按适合屏幕 dpi 的系数放大。

解决方案

有两种简单的方法可以让您的应用在不同的屏幕尺寸上按比例显示相同。

首先是使用不同的布局文件夹(layout-ldpi、layout-mdpi等)。这种技术在这里得到了很好的解释。更推荐的方法是style为每个密度使用不同的值,因此您仍然可以维护一个layout文件夹并参考样式而不是进行测量。这可以使用相同的技术来完成,但是您将拥有 values-ldpi、values-mdpi 等。这对于跨屏幕尺寸拥有标准尺寸的 UI 元素很有用。

另一种方法是在weights整个布局中使用。无论屏幕大小的密度如何,权重都会自动调整。如果你想要三个不同宽度的列,这将很有帮助——你可以很容易地使用权重告诉布局 A 列需要占据屏幕可用宽度的 40%,而 B 和 C 将有每人 30%。这对于跨屏幕尺寸的标准布局很有用。

一个外观简洁、编码良好的应用程序将实现这两​​者。

于 2013-10-01T12:33:37.777 回答
2

这是因为您提供的固定尺寸只能适合您正在使用的特定屏幕尺寸。因此,尽量避免使用静态尺寸并使用 match_parent、wrap_content 和 fill_parent,以便您的布局适合每个屏幕尺寸。

于 2013-10-01T04:07:20.273 回答