Как установить расстояние между 2 видами относительно ширины экрана без использования свойства margin в ConstraintLayout

#android #android-layout #android-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"
    tools:context=".Fragments.SetProfileFragment">

    <TextView
        android:id="@ id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="4dp"
        android:layout_marginTop="4dp"
        android:text="Test 1"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@ id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="12dp"
        android:layout_marginTop="4dp"
        android:text="Test 2"
        android:textSize="20sp"
        app:layout_constraintStart_toEndOf="@id/textView1"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>
 

Но я хочу, чтобы расстояние между ними TextViews составляло 1% от экрана. Возможно ли это?

Комментарии:

1. Для этого вы можете добавить поле во время выполнения… например, вы можете узнать ширину и высоту экрана во время выполнения и добавить 1% поля к вашему представлению

2. значит, я должен программно установить маржу?

3. ДА…………

4. большое спасибо , но это своего рода сложность, я хочу, чтобы макет отвечал на запросы, если я ограничу пространство в коде, это нормально ?

5. Вместо полей вы также можете использовать отступы…пожалуйста, проверьте приведенный ниже код, который я добавил..

Ответ №1:

но я хочу, чтобы расстояние между двумя текстовыми изображениями составляло 1% процента экрана. возможно ли это?

  • Для установки ограничения start amp; top для родительского элемента: Используйте горизонтальные и вертикальные направляющие с процентами от корня ConstraintLayout :

    1% считается равным 0,01, так как 1% равен ширине всего экрана >>> Поэтому используйте app:layout_constraintGuide_percent="0.01"

    Вы можете применить ограничения к textview1 , и, чтобы не повторяться, вы можете ограничить textView2 базовую textview1 линию .

  • Для установки 1% ширины экрана между текстовыми изображениями: Используйте пространство, ограниченное до конца textView1 , в процентах от 1% ширины экрана: app:layout_constraintWidth_percent="0.01" . Затем ограничьте textView2 пространство, а не textView .
 <?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"
    tools:context=".Fragments.SetProfileFragment">

    <androidx.constraintlayout.widget.Guideline
        android:id="@ id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_constraintGuide_percent="0.01" />

    <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.01" />

    <TextView
        android:id="@ id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Test 1"
        android:textSize="20sp"
        app:layout_constraintStart_toStartOf="@id/guideline"
        app:layout_constraintTop_toTopOf="@id/guideline2" />

    <Space
        android:id="@ id/space"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        app:layout_constraintStart_toEndOf="@id/textView1"
        app:layout_constraintWidth_percent="0.01" />

    <TextView
        android:id="@ id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Test 2"
        android:textSize="20sp"
        app:layout_constraintBaseline_toBaselineOf="@id/textView1"
        app:layout_constraintStart_toEndOf="@id/space"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>
 

Ответ №2:

Вы можете попробовать этот код

     val displayMetrics = DisplayMetrics()
    windowManager.defaultDisplay.getMetrics(displayMetrics)

    val width = displayMetrics.widthPixels
    val height = displayMetrics.heightPixels
    val widthPer = (1*100)/width  //1% percentage width
    val heightPer = (1*100)/height //1% percentage height
    textView1.setPadding(widthPer, heightPer, widthPer, heightPer)  //Adding padding
    textView2.setPadding(widthPer, heightPer, widthPer, heightPer) //Adding padding