#android
#Android
Вопрос:
Мое изображение на каком-то устройстве просто отличное, но на каком-то маленьком телефоне с дисплеем положение изображения находится вне диапазона
Помогите мне, пожалуйста
<?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">
<ImageView
android:id="@ id/imageView6"
android:layout_width="198dp"
android:layout_height="182dp"
android:layout_marginStart="107dp"
android:layout_marginTop="77dp"
android:layout_marginEnd="107dp"
android:layout_marginBottom="472dp"
android:src="@drawable/hi"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:contentDescription="@string/todo" />
</android.support.constraint.ConstraintLayout>
Комментарии:
1.
android:layout_width="198dp" android:layout_height="182dp" android:layout_marginStart="107dp" android:layout_marginTop="77dp" android:layout_marginEnd="107dp" android:layout_marginBottom="472dp"
почему вы устанавливаете жестко заданные значения? это и есть главная причина.
Ответ №1:
Когда вы используете фиксированный размер при просмотре, ваш экран не будет реагировать, потому что разные устройства имеют разный размер экрана, и то, что может хорошо выглядеть на одних экранах, не обязательно будет хорошо выглядеть и на другом экране с другим размером экрана.
Чтобы исправить это — не используйте фиксированный размер в своем представлении — это приведет к тому, что ваш экран перестанет реагировать, вместо этого используйте ConstrainLayout с некоторыми направляющими:
<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">
<ImageView
android:id="@ id/imageView6"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:contentDescription="todo"
android:src="@drawable/common_full_open_on_phone"
app:layout_constraintBottom_toTopOf="@ id/guideline2"
app:layout_constraintEnd_toStartOf="@ id/guideline4"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="@ id/guideline5"
app:layout_constraintTop_toTopOf="@ id/guideline3"
app:layout_constraintVertical_bias="0.0" />
<androidx.constraintlayout.widget.Guideline
android:id="@ id/guideline2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.6" />
<androidx.constraintlayout.widget.Guideline
android:id="@ id/guideline3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.2" />
<androidx.constraintlayout.widget.Guideline
android:id="@ id/guideline4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.8" />
<androidx.constraintlayout.widget.Guideline
android:id="@ id/guideline5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.2" />
Ответ №2:
Используйте эту библиотеку https://github.com/intuit/sdp. В нем представлена новая единица измерения масштаба под названием sdp
(scalable dp), которая автоматически масштабирует ваши представления в зависимости от вашего устройства.
Ответ №3:
Использование dp непосредственно в макетах ухудшает ситуацию при разных размерах экрана.
вы можете использовать следующую библиотеку для придания компонентам гибкого размераhttps://github.com/intuit/sdp
и вы можете использовать размеры следующим образом :
android:padding="@dimen/_8sdp
А для определения размеров текста используйте следующую библиотеку.
https://github.com/intuit/ssp
и используйте его для определения размера текста
android:textSize="@dimen/_10ssp"
Ответ №4:
Замените ваш 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">
<ImageView
android:id="@ id/imageView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/Hi"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.06"/>
</android.support.constraint.ConstraintLayout>
Комментарии:
1. Это не очень хороший ответ — вы везде используете фиксированный размер, и его экран не будет выглядеть одинаково для всех устройств, проверьте мой ответ.
Ответ №5:
измените код на это, и это произойдет приложение: layoutconstraintHorizontal_bias=»0.5″ приложение: layoutconstraintVertical_bias=»0.1″ введите описание изображения здесь
Ответ №6:
Просто удалите все поля и отступы (их предпочитают использовать для небольших подробных изменений в макете ограничений) и используйте их оба
приложение: layout_constraintHorizontal_bias=»0″ приложение: layout_constraintVertical_bias=»0″
Смещение используется для перемещения вашего изображения или вида по дисплею с шагом в %, поэтому оно использует дисплей устройства и применяет ваше изображение в соответствии с установленным вами смещением в%.
Поиграйте с ними, и вы найдете решение
Я думаю, 0,5 по горизонтали и 0,1 по вертикали будет вполне достаточно
Ваш ImageView может выглядеть примерно так
<ImageView
android:id="@ id/imageView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/Hi"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.1"
app:layout_constraintHorizontal_bias="0.5"/>