Горизонтальное расположение, при котором один элемент имеет фиксированную ширину, а другой - максимально широкий

Трюк для решения этого вопроса как однострочного заключается в переводе принятого подхода: вместо того, чтобы начинать с исходного объекта orig, можно начинать с ключей, которые они хотят извлечь.

Используя Array#reduce можно сохранить каждый необходимый ключ на пустом объекте, который передается как initialValue для указанной функции.

Так же:

const orig = {
  id: 123456789,
  name: 'test',
  description: '…',
  url: 'https://…',
};

const filtered = ['id', 'name'].reduce((result, key) => { result[key] = orig[key]; return result; }, {});

console.log(filtered); // Object {id: 123456789, name: "test"}

0
задан Fantômas 29 March 2019 в 13:09
поделиться

1 ответ

Это действительно простая компоновка, и ее легко достичь с помощью constraintLayout. Я не включаю FrameLayout и LinearLayout, которые вы использовали в качестве оберток. Вы можете добавить их в качестве обёрток с той же шириной и высотой, что и TextView, и это не повлияет на макет. Здесь вы идете -

<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:orientation="vertical">

    <TextView
        android:id="@+id/hello"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:background="@android:color/holo_orange_light"
        android:gravity="center"
        android:text="Hello"
        android:textSize="25sp"
        app:layout_constraintEnd_toStartOf="@id/world"
        app:layout_constraintStart_toStartOf="parent" />

    <TextView
        android:id="@+id/world"
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:background="@android:color/holo_purple"
        android:gravity="center"
        android:text="World"
        android:textSize="25sp"
        app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

Когда вы устанавливаете app:layout_constraintEnd_toEndOf="parent" для второго макета («Мир»), он выравнивает макет до конца (справа). Я установил его пользовательскую ширину с помощью android:layout_width="100dp".

Для 1-го расположения («Привет») вы будете использовать

app:layout_constraintEnd_toStartOf="@id/world"
app:layout_constraintStart_toStartOf="parent"

с android:layout_width="0dp". 0dp на самом деле не будет устанавливать ширину равной 0, но будет растягивать ее между своими ограничениями. Таким образом, в этом случае он установит начало (слева) на начало родителя, а конец установит начало (слева) 2-го макета. Таким образом, он просто растянется до этого макета.

Вот как это выглядит -

Sample layout of above xml with blueprint

0
ответ дан Yashovardhan99 29 March 2019 в 13:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: