我们什么时候应该在布局中使用dp或sp?

时间:2015-02-09 17:11:01

标签: android layout view

我创建了一个在大屏幕上看起来很完美的Android应用程序。但是视图变形或者在其他方面,上部和下部部分在较小的屏幕上被切断。我可以互换地使用sp和dp而不知道它们是不同的,如果不相同的话。我使用sp作为字体,使用dp作为规则。但这并没有奏效。 sp和dp有什么区别以及什么时候使用什么?提前致谢。 xml布局文件是

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/tempLabel"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#CC66FF"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.coolweather.MainActivity" >

<TextView
    android:id="@+id/actualTemp"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="@string/hundred"
    android:textColor="#FFFFFF"
    android:textSize="150sp" />

<ImageView
    android:id="@+id/degreeImageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/actualTemp"
    android:layout_toRightOf="@+id/actualTemp"
    android:paddingTop="50dp"
    android:src="@drawable/degree" />

<ImageView
    android:id="@+id/imageIcon"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/cityLabel"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="55dp"
    android:src="@drawable/cloudy" />

<TextView
    android:id="@+id/summary"
    android:textSize="19sp"
    android:textColor="#FFFFFF"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/linearLayout1"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="38dp"
    android:text="Pleasant cool day with flowers!" />

<LinearLayout
    android:id="@+id/linearLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignRight="@+id/degreeImageView"
    android:layout_below="@+id/actualTemp"
    android:layout_marginTop="15dp"
    android:orientation="horizontal"
    android:weightSum="2" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical"
        android:paddingLeft="15dp" >

        <TextView
            android:id="@+id/humidityLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Humidity"
            android:textColor="#FFFFFF"
            android:textSize="17sp" />

        <TextView
            android:id="@+id/humidity"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="80%"
            android:textColor="#FFFFFF"
            android:textSize="17sp" />
    </LinearLayout>

    <LinearLayout
         android:paddingLeft="15dp"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/precLabel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="Rain/Snow"
            android:textColor="#FFFFFF"
            android:textSize="17sp" />

        <TextView
            android:id="@+id/prcip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="100%"
            android:textColor="#FFFFFF"
            android:textSize="17sp" />
    </LinearLayout>
</LinearLayout>

<TextView
    android:id="@+id/timeLabel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/actualTemp"
    android:layout_centerHorizontal="true"
    android:text="At 5:00pm it will be"
    android:textColor="#80FFFFFF"
    android:textSize="20sp" />

<TextView
    android:id="@+id/cityLabel"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/timeLabel"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="37dp"
    android:text="Roorkee"
    android:textColor="#FFFFFF"
    android:textSize="22sp"
    android:layout_marginLeft="10dp" />

<ProgressBar
   android:layout_marginBottom="15dp"
    android:id="@+id/progressBar1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/imageIcon"
    android:layout_centerHorizontal="true" />

<ImageView
    android:id="@+id/refreshImageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/progressBar1"
    android:layout_centerHorizontal="true"
    android:src="@drawable/refresh" />

3 个答案:

答案 0 :(得分:2)

Android建议您在设置字体大小时使用sp,并为宽度,长度,高度,边距,填充等所有内容设置dp

答案 1 :(得分:0)

您可以同时使用它们:高度,边距,字体大小等。

区别在于dp是固定单位,sp将根据手机字体大小设置进行缩放。

答案 2 :(得分:0)

sp是推荐的字体大小单位,因为用户可能会启用低可见性设置来增加设备的字体大小。

dp是将屏幕分辨率转换为实际尺寸的物理度量单位。 dp计算为resolution / density,其中density为mdpi屏幕(160dpi)为1.0,并根据dpi进行相应缩放(即480 dpi的xxhdpi屏幕密度为3.0) )。 dp用于您希望采用固定的实际大小的所有其他物理元素。

你需要发布你的布局代码,以便弄清楚为什么它会在较小的屏幕而不是较大的屏幕上被切断。这很可能是因为你定义了一个固定的布局高度/宽度(即600 dp),它在平板电脑上显得很好(通常最小宽度至少为600 dp)但是大多数手机在纵向模式下的宽度都是360 dp。