使用Constraintlayout和dp,实际设备中的布局大小不同

时间:2019-03-07 19:33:00

标签: android layout

我有一些活动类似于图片中的活动,我在所有活动中都使用Constraintlayout和线性布局,所有内容都在dp和sp中设置。但是在仿真器中看起来与在实际设备中不同。左图来自仿真器,右图来自华为。我阅读了一些文档,他们建议使用我已经在做的constraintlayouts和dp。不会以编程方式更改任何大小。我也尝试过使用layout_weight,但也没有成功,所以我不知道自己缺少什么。

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/constraintLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/main_activity_animation_list"
tools:context=".MainActivity">

<LinearLayout
    android:id="@+id/laySimbol"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="@color/buttonShadeInici"
    android:orientation="horizontal">

    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="77dp"
        android:layout_gravity="center_vertical"
        android:background="@android:color/transparent"
        android:text="⟁"
        android:textColor="@color/blueShade27"
        android:textSize="50sp"
        android:textStyle="bold" />

    <Button
        android:id="@+id/buttonScore"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_gravity="center_vertical"
        android:layout_marginLeft="30dp"
        android:layout_weight="1"
        android:background="@drawable/buttonlevelscore"
        android:foregroundGravity="center"
        android:text="1.254"
        android:textColor="@color/blueShade62"
        android:textSize="20sp"
        android:textStyle="bold" />

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:clickable="false"
        tools:context="com.example.root.exercicis.MainActivity">

        <com.example.root.exercicis.LikeButtonView

            android:id="@+id/LikeButtonView"
            android:layout_width="60dp"
            android:layout_height="60dp"
            android:layout_gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="30dp"
            android:clickable="false" />
    </FrameLayout>

    <ImageView
        android:id="@+id/imageViewPopUp2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:foregroundGravity="right"
        android:onClick="ShowPopup"
        android:paddingRight="10dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toStartOf="@+id/verticalLayout"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@android:drawable/ic_menu_sort_alphabetically" />

</LinearLayout>

<LinearLayout
    android:id="@+id/verticalLayout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/layout_preguntes"
    android:gravity="center"
    android:orientation="vertical"
    android:padding="25dp"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHorizontal_bias="0.5"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/laySimbol">

    <TextView
        android:id="@+id/preguntaView"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="TextView"
        android:textColor="@android:color/background_light"
        android:textSize="30sp"
        app:layout_constraintBottom_toTopOf="@+id/verticalLayout"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/respostaButton1"
        android:layout_width="300dp"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:layout_marginTop="40dp"
        android:layout_marginBottom="20dp"
        android:background="@drawable/buttons_resposta_corners_top"
        android:color="#64686868"
        android:gravity="center"
        android:onClick="OnClickButton"
        android:paddingBottom="0dp"
        android:tag="0"
        android:text="Button"
        android:textAllCaps="false"
        android:textColor="#FFFFFF"
        android:textSize="30sp" />


    <Button
        android:id="@+id/respostaButton2"
        android:layout_width="300dp"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:layout_marginBottom="20dp"
        android:background="@drawable/buttons"
        android:gravity="center"
        android:onClick="OnClickButton"
        android:paddingBottom="0dp"
        android:tag="1"
        android:text="Button"
        android:textAllCaps="false"
        android:textColor="#FFFFFF"
        android:textSize="30sp" />

    <Button
        android:id="@+id/respostaButton3"
        android:layout_width="300dp"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:layout_marginBottom="20dp"
        android:background="@drawable/buttons"
        android:gravity="center"
        android:onClick="OnClickButton"
        android:paddingBottom="0dp"
        android:tag="2"
        android:text="Button"
        android:textAllCaps="false"
        android:textColor="#FFFFFF"
        android:textSize="30sp" />

    <Button
        android:id="@+id/respostaButton4"
        android:layout_width="300dp"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:layout_marginBottom="20dp"
        android:background="@drawable/buttons_resposta_corners_bottom"
        android:gravity="center"
        android:onClick="OnClickButton"
        android:paddingBottom="0dp"
        android:tag="3"
        android:text="Button"
        android:textAllCaps="false"
        android:textColor="#FFFFFF"
        android:textSize="30sp" />

</LinearLayout>

4 个答案:

答案 0 :(得分:0)

您可以使用SDP(Scalable dp)解决此问题:https://github.com/intuit/sdp

@dimen/_1sdp // Change value before sdp keyword

答案 1 :(得分:0)

首先,您应注意,“ dp”取决于设备屏幕的像素密度。
也就是说,它们在仿真器和真实设备上的显示方式有所不同也就不足为奇了。
我愿意打赌,模拟器与Real设备的dpi或分辨率是不同的。

除此之外-您要在所有设备上实现的预期效果到底是什么?
或者说,您不喜欢并试图阻止这种情况发生的是什么?
了解这些事情对我找出罪魁祸首或应该改变的原因非常有帮助。

答案 2 :(得分:0)

您可能不会在所有设备上都有相同的外观。不仅像素数和分辨率不同,屏幕比例和密度也不同。 关于视图重叠,在每个约束布局的子级上设置约束很重要。您缺少第一个线性布局的约束。

<LinearLayout
    android:id="@+id/laySimbol"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:background="@color/buttonShadeInici"
    android:orientation="horizontal"
    app:layout_constraintBottom_toTopOf="@+id/verticalLayout"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent">

此外,您正在为linearlayout子级设置约束,它将无法正常工作。

我的建议是检查布局,设置所有约束,并且不要在约束内使用线性布局,这是不需要的。 选中this

答案 3 :(得分:0)

根据我作为移动开发人员的经验,我没有使用 Button,而是将其更改为 TextView,这样设计起来更容易。您必须避免使用硬编码,您的宽度和高度必须是 match_parent 或 wrap_content。使用 TextView 作为按钮将帮助您创建一个 wrap_content 大小的按钮。

<Button
    android:id="@+id/button6"
    android:layout_width="wrap_content"
    android:layout_height="77dp"

<Button
    android:id="@+id/buttonScore"
    android:layout_width="wrap_content"
    android:layout_height="40dp"