密度像素(dp)对所有分辨率都不能正常工作

时间:2013-10-01 03:58:44

标签: android pixels

    <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,PLZ告诉我,如果我做错了什么

2 个答案:

答案 0 :(得分:4)

  

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

我从中理解的是,您认为使用dp代替px(或incm)会神奇地工作,以便他们都拥有所有设备上的物理尺寸相同,无论设备的密度(ppi)如何。

情况并非如此。

dp或dip,如here所述,是

  

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

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

  

在更高密度的屏幕上运行时,使用的像素数   draw 1dp按照适合屏幕dpi的因子进行放大。

<强>解决方案

有两种简单的方法可让您的应用在不同的屏幕尺寸上看起来成比例相同。

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

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

看起来很干净,编码很好的应用程序会同时实现这两种功能。

答案 1 :(得分:2)

因为您提供的固定尺寸只适合您正在使用的特定屏幕尺寸。因此,请尝试避免静态尺寸并使用match_parent,wrap_content和fill_parent,以便您可以使布局适合每种屏幕尺寸。