Это похоже на хорошую задачу для ConstraintLayout
. С его помощью вы можете получить плоский макет, где у вас нет вложенности. Основными понятиями в макете являются ограничения. Вы можете прочитать о них больше на https://developer.android.com/training/constraint-layout.
. В ConstraintLayout
вы организуете представления с ограничениями. То есть вы можете сказать, что все белые клавиши должны быть ограничены снизу родительского элемента, а их верхняя часть - ориентиром на 2/3 высоты экрана. Затем вы можете сказать, что первая кнопка должна находиться в самом начале экрана, рядом со второй кнопкой, которая находится рядом с третьей кнопкой и так далее. Раскладка автоматически распределяет их равномерно.
После этого вы кладете черные клавиши сверху. Вы можете указать их ширину, используя процентное значение (то есть процент от родительской ширины). В конце вы получите что-то вроде этого:
// Layout
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.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="@android:color/darker_gray">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/topGuideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.67" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/blackKeysGuideline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.85" />
<!-- White buttons -->
<Button
android:id="@+id/button1"
style="@style/KeyboardKeyWhite"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/button2"
style="@style/KeyboardKeyWhite"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button3"
app:layout_constraintStart_toEndOf="@id/button1"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/button3"
style="@style/KeyboardKeyWhite"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button4"
app:layout_constraintStart_toEndOf="@id/button2"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/button4"
style="@style/KeyboardKeyWhite"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button5"
app:layout_constraintStart_toEndOf="@id/button3"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/button5"
style="@style/KeyboardKeyWhite"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button6"
app:layout_constraintStart_toEndOf="@id/button4"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/button6"
style="@style/KeyboardKeyWhite"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/button7"
app:layout_constraintStart_toEndOf="@id/button5"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/button7"
style="@style/KeyboardKeyWhite"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/button6"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<!-- Black buttons -->
<Button
android:id="@+id/blackButton1"
style="@style/KeyboardKeyBlack"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/blackKeysGuideline"
app:layout_constraintEnd_toEndOf="@id/button2"
app:layout_constraintStart_toStartOf="@id/button1"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/blackButton2"
style="@style/KeyboardKeyBlack"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/blackKeysGuideline"
app:layout_constraintEnd_toEndOf="@id/button3"
app:layout_constraintStart_toStartOf="@id/button2"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/blackButton3"
style="@style/KeyboardKeyBlack"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/blackKeysGuideline"
app:layout_constraintEnd_toEndOf="@id/button5"
app:layout_constraintStart_toStartOf="@id/button4"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/blackButton4"
style="@style/KeyboardKeyBlack"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/blackKeysGuideline"
app:layout_constraintEnd_toEndOf="@id/button6"
app:layout_constraintStart_toStartOf="@id/button5"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
<Button
android:id="@+id/blackButton5"
style="@style/KeyboardKeyBlack"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="@id/blackKeysGuideline"
app:layout_constraintEnd_toEndOf="@id/button7"
app:layout_constraintStart_toStartOf="@id/button6"
app:layout_constraintTop_toTopOf="@id/topGuideline" />
</androidx.constraintlayout.widget.ConstraintLayout>
// Styles
<style name="KeyboardKeyWhite" parent="Widget.AppCompat.Button">
<item name="android:background">@android:color/white</item>
<item name="android:layout_margin">2dp</item>
</style>
<style name="KeyboardKeyBlack" parent="Widget.AppCompat.Button">
<item name="android:background">@android:color/black</item>
<item name="android:layout_margin">2dp</item>
<item name="layout_constraintWidth_percent">0.08</item>
</style>