Android Constraint Layout - сделать вид, занимающий верхнюю половину экрана - PullRequest
0 голосов
/ 14 мая 2018

Я пытаюсь заставить textview занимать верхнюю половину экрана, чтобы я мог ознакомиться с новой системой макетов ограничений.

Я попытался использовать следующее:

<?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"
    app:layout_constraintVertical_weight="2"
    tools:context=".MainActivity">

    <TextView
        android:text="Test"
        android:background="@color/colorPrimaryDark"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintLeft_toRightOf="parent"
        app:layout_constraintRight_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_weight="1" />

</android.support.constraint.ConstraintLayout>

Но это просто приводит к следующему:

Screenshot Of Emulator

Что я делаю не так?

1 Ответ

0 голосов
/ 14 мая 2018

Если вы используете Constraint Layout 1.1.0 (последняя стабильная на момент написания) ... лучший способ - это просто использовать проценты!

<?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"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@android:color/black"
        android:text="Test"
        android:textColor="@android:color/white"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHeight_default="percent"
        app:layout_constraintHeight_percent="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

Это дает:

This

ОБНОВЛЕНИЕ :

  1. Почему вы устанавливаете layout_width в 0dp и используете начало / конец вместо layout: width = "match_parent”?

Хороший вопрос. ConstraintLayout не поддерживает match_parent (решение, которое сейчас, спустя год, я думаю, было в порядке, поскольку оно заставляет пользователей задавать этот вопрос, когда они исправляются, но я думаю, что это должно было быть предупреждение, и компоновка должна была сделать то, что ожидалось - прикрепить каждую сторону к родителю и использовать 0dp за кулисами). На практике это не всегда происходит, и это более запутанно, чемтехническая правильность использования 0dp (что за кадром соответствует MATCH_CONSTRAINT, а не MATCH_PARENT). Я предлагаю вам взглянуть на официальную документацию по макету ограничений , чтобы узнать об этом.

Для«ПричинойЧитатель «Я спешу», я использовал 0dp, потому что `match_parent_ не работает с ConstraintLayout, как вы думаете (это может выглядеть нормально , но это не работает).0dp означает соответствие ограничениям, ваш размер будет в конечном итоге определяться этим.

Зачем начинать / заканчивать?Потому что вы не должны использовать лево / право, если вы нацелены на API 16+ и если вы нацеливаетесь на API 16 <, тогда вы должны использовать ОБА, потому что слева направо это нормально, но арабский, иврит и многие языки справа налево,не будет работать правильно, если вы не используете начало / конец.(Слева направо, справа налево!).Поверьте мне, используйте начало / конец всегда, для всего. </p>

Как проверить, какую версию библиотеки ограничений я использую?

Ваши библиотеки импортируются через Gradle, поэтому откройте build.gradle и найдите раздел dependencies.Он будет содержать строку, подобную этой:

implementation "com.android.support.constraint:constraint-layout:1.1.0”

(например).Никаких загадок.

...