入职屏幕的布局

时间:2017-12-03 16:18:14

标签: android android-layout

对于我的应用程序,我创建了一个类似于以下内容的模拟屏幕:

enter image description here

现在我并不完全不知道如何在Android布局中设计它。下面的文字不应该那么难。最大的问题是灰色区域的顶部。所有灰色部分应为ImageView1:1比例,以便我可以单独为它们设置动画。

您认为我应该使用哪种布局(RelativeLayoutConstraintLayout等)?我认为最好避免使用硬编码的dp值,使其看起来与屏幕大小和分辨率无关。所以百分比值在这里更好吗?

编辑:这是我目前的布局,但我无法在图片中间找到4个圆圈......

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/colorPrimary"
    android:padding="16dp">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:contentDescription="@string/empty"
        android:cropToPadding="true"
        android:padding="48dp"
        android:tint="@color/colorPrimaryDark"
        app:layout_constraintDimensionRatio="w,1:1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.3"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/ringer" />

    <ImageView
        android:id="@+id/location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/empty"
        app:layout_constraintDimensionRatio="w,1:1"
        app:layout_constraintEnd_toStartOf="@+id/timerange"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/icon"
        app:srcCompat="@drawable/location" />

    <ImageView
        android:id="@+id/timerange"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/empty"
        app:layout_constraintDimensionRatio="w,1:1"
        app:layout_constraintEnd_toStartOf="@+id/wifi"
        app:layout_constraintStart_toEndOf="@+id/location"
        app:layout_constraintTop_toBottomOf="@id/icon"
        app:srcCompat="@drawable/sound_alarm" />

    <ImageView
        android:id="@+id/wifi"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/empty"
        app:layout_constraintDimensionRatio="w,1:1"
        app:layout_constraintEnd_toStartOf="@+id/bluetooth"
        app:layout_constraintStart_toEndOf="@+id/timerange"
        app:layout_constraintTop_toBottomOf="@id/icon"
        app:srcCompat="@drawable/wifi" />

    <ImageView
        android:id="@+id/bluetooth"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@string/empty"
        app:layout_constraintDimensionRatio="w,1:1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/wifi"
        app:layout_constraintTop_toBottomOf="@id/icon"
        app:srcCompat="@drawable/bluetooth" />

    <TextView
        android:id="@+id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="24dp"
        android:text="@string/onboardTitle1"
        android:textAlignment="center"
        android:textColor="@android:color/white"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/timerange" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="8dp"
        android:text="@string/onboardDescrption1"
        android:textAlignment="center"
        android:textColor="@android:color/white"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/title" />

</android.support.constraint.ConstraintLayout>

2 个答案:

答案 0 :(得分:1)

您可以尝试下面的内容;​​

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/infoBlue"
    android:orientation="vertical"
    android:padding="16dp">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom">
        <ImageView
            android:id="@+id/icon"
            android:layout_width="130dp"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:background="@color/gray"
            android:contentDescription="@string/empty"
            android:cropToPadding="true"
            android:padding="48dp"
            android:tint="@color/colorPrimaryDark" />

        <ImageView
            android:id="@+id/location"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_below="@+id/icon"
            android:layout_marginRight="10dp"
            android:layout_toLeftOf="@+id/icon"
            android:layout_toStartOf="@+id/icon"
            android:background="@color/gray"
            android:contentDescription="@string/empty" />

        <ImageView
            android:id="@+id/timerange"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_below="@+id/icon"
            android:layout_marginLeft="10dp"
            android:layout_toEndOf="@+id/icon"
            android:layout_toRightOf="@+id/icon"
            android:background="@color/gray"
            android:contentDescription="@string/empty" />
    </RelativeLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/wifi"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_below="@+id/icon"
            android:layout_marginEnd="40dp"
            android:layout_marginRight="40dp"
            android:layout_toEndOf="@+id/icon"
            android:layout_toRightOf="@+id/icon"
            android:background="@color/gray"
            android:contentDescription="@string/empty" />

        <ImageView
            android:id="@+id/bluetooth"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_below="@+id/icon"
            android:layout_marginLeft="10dp"
            android:layout_toEndOf="@+id/icon"
            android:layout_toRightOf="@+id/icon"
            android:background="@color/gray"
            android:contentDescription="@string/empty" />
    </LinearLayout>
</LinearLayout>

在我的情况下看起来像下面那样;

enter image description here

答案 1 :(得分:0)

我会从RelativeLayout开始,然后在其中嵌套一个固定高度的LinearLayout

我的推理如下:

  • 您的四个较小的圆圈都在不同的列中(不重叠),这使得线性布局可以轻松地将它们隔开。
  • 父相对布局将允许您将线性布局向上移动(因此其不可见部分与较大图像重叠)
  • LinearLayout的固定高度允许您简单地使用重力将圆圈放在顶部和底部边界以创建您显示的布局

    <RelativeLayout>
        <ImageView android:id="@+id/square" />
        <LinearLayout android:layout_height="100dp"
                      android:layout_marginTop="-24dp">
             <ImageView android:foregroundGravity="top" />
             <ImageView android:foregroundGravity="bottom" />
             <ImageView android:foregroundGravity="bottom" />
             <ImageView android:foregroundGravity="top" />
        </LinearLayout>
    </RelativeLayout>
    

根据您的矩阵,使用前景重力可能不适合您。如果是这种情况,请忘记LinearLayout的固定高度,然后在“底部”对齐图像上添加上边距