Трюк для решения этого вопроса как однострочного заключается в переводе принятого подхода: вместо того, чтобы начинать с исходного объекта 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"}
Это действительно простая компоновка, и ее легко достичь с помощью 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-го макета. Таким образом, он просто растянется до этого макета.
Вот как это выглядит -