Я пытаюсь настроить макет для приложения для подсчета, которое имеет большую круглую кнопку чуть выше центра экрана и отображение счетчика под ним. У меня проблемы с удержанием круга по кругу, целиком на экране, и не перекрывая другой вид во всех ситуациях.
Установкой, которую я сейчас использую, является ConstraintLayout с двумя TextViews. Кнопка TextView использует овал xml в качестве фона и имеет круглую форму с атрибутом layout_constraintDimensionRatio, установленным в единицу. В портретном режиме ширина устанавливается на 80% доступного пространства, и все хорошо, когда экран достаточно стандартный при обычном использовании.
Проблема возникает, если доступные размеры экрана для приложения более квадратные, так что вертикальный размер меньше горизонтального. В этом случае ширина по-прежнему устанавливается первой, поэтому мой круг закрывает другой вид или частично смещается с экрана.
В настоящее время в альбомной раскладке таймер отключен в одну сторону. В идеале в альбомной компоновке я бы держал кнопку по центру, а счетчик вправо, но чтобы прекратить увеличивать размер кнопки, если для таймера недостаточно места.
Я думаю, что в идеале я бы установил макет вверх, чтобы проверить, является ли горизонтальное или вертикальное пространство изначально короче, затем сначала установите меньший размер. Это возможно? Или, возможно, есть лучший подход к достижению желаемого макета?
Любая помощь будет очень признательна, Спасибо, Кэт ie
Это макет по умолчанию xml:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
tools:context=".ui.CounterFragment">
<ImageView
android:id="@+id/imageView"
android:layout_width="0dp"
android:layout_height="0dp"
android:contentDescription="@string/content_description_background_image"
android:scaleType="fitStart"
android:src="@drawable/dog_image_jpg_light"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1"
tools:visibility="visible" />
<TextView
android:id="@+id/timer_display"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/timer_display"
android:textSize="40sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/guidelineHorizontal" />
<TextView
android:id="@+id/counter_button"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/circle_selector"
android:contentDescription="@string/counter_button_content_description"
android:text="@string/counter_text"
app:layout_constraintBottom_toTopOf="@+id/timer_display"
app:layout_constraintDimensionRatio="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.375"
app:layout_constraintWidth_percent=".8" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineVertical"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.5" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.75" />
</androidx.constraintlayout.widget.ConstraintLayout>
Это ландшафтный макет:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
tools:context=".ui.CounterFragment">
<ImageView
android:id="@+id/imageView"
android:layout_width="0dp"
android:layout_height="0dp"
android:contentDescription="@string/content_description_background_image"
android:scaleType="fitStart"
android:src="@drawable/dog_image_jpg_light"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1"
tools:visibility="visible" />
<TextView
android:id="@+id/timer_display"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/timer_display"
android:textSize="40sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/counter_button"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/counter_button"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/circle_selector"
android:contentDescription="@string/counter_button_content_description"
android:text="@string/counter_text"
app:layout_constraintBottom_toBottomOf="@id/guidelineHorizontal"
app:layout_constraintDimensionRatio="1"
app:layout_constraintEnd_toStartOf="@id/guidelineVertical87"
app:layout_constraintHeight_percent="0.8"
app:layout_constraintStart_toEndOf="@id/guidelineVertical12"
app:layout_constraintTop_toTopOf="@id/guidelineHorizontal" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineVertical75"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.75" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineHorizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.5" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineVertical12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.125" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineVertical87"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.875" />
</androidx.constraintlayout.widget.ConstraintLayout>