对于我的应用程序,我创建了一个类似于以下内容的模拟屏幕:
现在我并不完全不知道如何在Android布局中设计它。下面的文字不应该那么难。最大的问题是灰色区域的顶部。所有灰色部分应为ImageView
,1:1
比例,以便我可以单独为它们设置动画。
您认为我应该使用哪种布局(RelativeLayout
,ConstraintLayout
等)?我认为最好避免使用硬编码的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>
答案 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>
在我的情况下看起来像下面那样;
答案 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的固定高度,然后在“底部”对齐图像上添加上边距