使用dp会照顾物理屏幕尺寸吗?

时间:2015-06-11 13:41:21

标签: android xml screen scaling

我在这里发布了questions中的一些内容,但我没有得到我的问题的明确答案。使用单位dp会照顾物理屏幕尺寸吗?我已经将单位dp用于我的所有视图,并且我已经尝试使它们的大小相对。但即使这样,我也必须给它们中的一些提供绝对大小。该应用程序将在4英寸和5英寸屏幕上运行相同。这是结构: enter image description here

这是我的XML:

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

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="400dp" >

    <RelativeLayout
        android:id="@+id/relativeLayout1"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_above="@+id/relativeLayout2"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentTop="true" >

        <ImageButton
            android:id="@+id/imageButton4"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:src="@drawable/left" />

        <ImageButton
            android:id="@+id/imageButton5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:src="@drawable/ic_launcher" />

        <ImageButton
            android:id="@+id/imageButton6"
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:src="@drawable/right" />
    </RelativeLayout>

         <RelativeLayout
        android:layout_width="fill_parent"
        android:id="@+id/rel2"
        android:layout_height="350dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/relativeLayout1" >

        <LinearLayout
            android:id="@+id/linearLayout1"
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentTop="true"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView2"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:src="@drawable/lc" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/linearLayout2"
            android:layout_width="wrap_content"
            android:layout_height="280dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/linearLayout1"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView3"
                android:layout_width="20dp"
                android:layout_height="20dp"
                android:layout_marginLeft="120dp"
                android:layout_marginTop="140dp"
                android:src="@drawable/untitled" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="30dp"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentRight="true"
            android:layout_below="@+id/linearLayout2"
            android:orientation="vertical" >

            <ImageView
                android:id="@+id/imageView1"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="64dp"
                android:src="@drawable/lc" />

        </LinearLayout>

  </RelativeLayout>

</RelativeLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="60dp"
     >

    <ImageButton
        android:id="@+id/imageButton1"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:src="@drawable/left" />

    <ImageButton
        android:id="@+id/imageButton2"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_alignBottom="@+id/imageButton1"
        android:layout_alignParentRight="true"
        android:src="@drawable/right" />

    <ImageButton
        android:id="@+id/imageButton3"
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/ic_launcher" />
</RelativeLayout>

</LinearLayout>

提前致谢....

4 个答案:

答案 0 :(得分:4)

您可以使用 values / dimens.xml

如下所示(例如:所有设备的3dp)

  

创建values / dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="three">3dp</dimen>
</resources>
  

创建值-sw360dp / dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="three">3.375dp</dimen>
</resources>
  

创建值-sw480dp / dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="three">4.5dp</dimen>
</resources>
  

创建值-sw600dp / dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="three">5.625dp</dimen>
</resources>
  

创建值-sw720dp / dimens.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="three">6.75dp</dimen>
</resources>

dp

的比率
  

对于默认值文件夹,其 1

     

表示360dp - 1.125

     

适用于480dp - 1.5

     

表示600dp - 1.875

     

表示720dp - 2.25

如何使用?例如:@ dimen / three

<RelativeLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/three"
    android:layout_above="@+id/relativeLayout2"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true" >

答案 1 :(得分:0)

不使用dp我们无法处理不同的屏幕尺寸。

为此您需要使用差异策略 你可以使用

android:layout_weight=".5"

如果设置android:layout_width="0dp",这将覆盖屏幕的一半 并且两个视图在一行

如果你设置height = 0dp,它将覆盖屏幕总高度的一半

注意

  

完全重量= 1;你可以像0.5 0.3等分开。

答案 2 :(得分:0)

我们不知道你的尺寸是多少,所以很难回答你的问题。但正如提到here

dp与屏幕尺寸无关,关于它的密度。你可以有2x 5英寸的屏幕。一个使用hdpi,第二个使用xxhdpi,您的布局将重新调整为可用的像素。

ldpi是mdpi的0.75倍尺寸

hdpi是mdpi的1.5倍尺寸

xhdpi是mdpi的2倍尺寸

答案 3 :(得分:0)

您可能需要采用不同的策略。首先,您可以使用维度文件为不同的屏幕密度定义布局或使用layout_weight。

我建议您查看Android开发人员指南,以设计不同屏幕尺寸的布局:https://developer.android.com/training/multiscreen/index.html