У меня есть 4 ImageView (изображения клавиш со стрелками) в RelativeLayout. Я хочу расположить клавишу со стрелкой вверх над левой (не совсем выше), прикрепив сюда образец макета (левая - это то, что я хочу).
Однако я не хочу использовать тег android:layout_marginTop = "165dp"
, так как разные устройства имеют разные размеры экрана.
Я просто хочу использовать android:layout_above = "@+id/left"
, чтобы идеально расположить его над стрелкой влево. Но когда я делаю это без использования android:layout_marginTop
, результат выглядит как это (чего я НЕ хочу).
Как сделать так, чтобы расположение клавиш со стрелками выглядело правильно на всех устройствах?
Вот мой XML:
<?xml version = "1.0" encoding = "utf-8"?>
<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:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".ControllerActivity">
<RelativeLayout
android:layout_width = "fill_parent"
android:layout_height = "fill_parent"
>
<ImageView
android:id = "@+id/up"
android:layout_width = "84dp"
android:layout_height = "96dp"
android:layout_above = "@+id/left"
android:layout_alignParentTop = "true"
android:layout_centerHorizontal = "true"
android:layout_marginTop = "165dp"
android:background = "?attr/selectableItemBackgroundBorderless"
android:clickable = "true"
app:srcCompat = "@drawable/up" />
<ImageView
android:id = "@+id/left"
android:layout_width = "80dp"
android:layout_height = "80dp"
android:layout_centerVertical = "true"
android:layout_toLeftOf = "@+id/up"
android:layout_toStartOf = "@+id/up"
app:srcCompat = "@drawable/left" />
<ImageView
android:id = "@+id/down"
android:layout_width = "80dp"
android:layout_height = "80dp"
android:layout_below = "@+id/left"
android:layout_centerHorizontal = "true"
app:srcCompat = "@drawable/down" />
<ImageView
android:id = "@+id/right"
android:layout_width = "80dp"
android:layout_height = "80dp"
android:layout_centerVertical = "true"
android:layout_toEndOf = "@+id/up"
android:layout_toRightOf = "@+id/up"
app:srcCompat = "@drawable/right" />
</RelativeLayout>
</android.support.constraint.ConstraintLayout>
Заранее спасибо.
Во-первых, я хотел бы отметить, что относительный макет там, где он сейчас находится, является избыточным. Таким образом, вы можете сделать его своим родительским макетом вместо макета ограничений.
Чтобы выполнить то, что вы хотите, удалите alignParentTop на стрелке вверх. Итак, ваш код будет выглядеть так:
<?xml version = "1.0" encoding = "utf-8"?>
<RelativeLayout 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:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".ControllerActivity">
<ImageView
android:id = "@+id/up"
android:layout_width = "84dp"
android:layout_height = "96dp"
android:layout_above = "@+id/left"
android:layout_centerHorizontal = "true"
android:background = "?attr/selectableItemBackgroundBorderless"
android:clickable = "true"
app:srcCompat = "@drawable/up" />
<ImageView
android:id = "@+id/left"
android:layout_width = "80dp"
android:layout_height = "80dp"
android:layout_centerVertical = "true"
android:layout_toLeftOf = "@+id/up"
android:layout_toStartOf = "@+id/up"
app:srcCompat = "@drawable/left" />
<ImageView
android:id = "@+id/down"
android:layout_width = "80dp"
android:layout_height = "80dp"
android:layout_below = "@+id/left"
android:layout_centerHorizontal = "true"
app:srcCompat = "@drawable/down" />
<ImageView
android:id = "@+id/right"
android:layout_width = "80dp"
android:layout_height = "80dp"
android:layout_centerVertical = "true"
android:layout_toEndOf = "@+id/up"
android:layout_toRightOf = "@+id/up"
app:srcCompat = "@drawable/right" />
</RelativeLayout>