почему текст занимает все пространство представления, а не просто "Hello"?
Потому что View
это гибкий контейнер и по умолчанию имеет flexDirection: 'column'
и alignItems: 'stretch'
, что означает, что его дочерние элементы должны быть растянуты, чтобы заполнить его ширину.
(Обратите внимание, в соответствии с документами , что все компоненты в React Native display: 'flex'
по умолчанию являются и display: 'inline'
вообще не существуют. Таким образом, поведение по умолчанию для элемента Text
внутри View
в React Native отличается от поведения по умолчанию для элемента span
внутри div
в Интернете; в последнем случае span не будет заполнять ширину, div
потому что a span
является встроенным элементом по умолчанию. В React Native такого понятия нет.)
Как текст может быть перемещен / выровнен вправо?
Это float
свойство не существует в React Native, но есть множество доступных вам опций (с немного другим поведением), которые позволят вам выровнять текст по правому краю. Вот те, о которых я могу думать:
<View>
<Text style={{textAlign: 'right'}}>Hello, World!</Text>
</View>
(Этот подход не меняет тот факт, что Text
заполняет всю ширину View
; он просто выравнивает текст по правому краю Text
.)
<View>
<Text style={{alignSelf: 'flex-end'}}>Hello, World!</Text>
</View>
Это сжимает Text
элемент до размера, необходимого для хранения его содержимого, и помещает его в конец поперечного направления (по умолчанию в горизонтальном направлении) View
.
<View style={{alignItems: 'flex-end'}}>
<Text>Hello, World!</Text>
</View>
Это эквивалентно установке alignSelf: 'flex-end'
на всех View
дочерних элементах.
<View style={{flexDirection: 'row', justifyContent: 'flex-end'}}>
<Text>Hello, World!</Text>
</View>
flexDirection: 'row'
устанавливает основное направление макета как горизонтальное, а не вертикальное; justifyContent
точно так же alignItems
, но управляет выравниванием в основном направлении, а не в поперечном направлении.
<View style={{flexDirection: 'row'}}>
<Text style={{marginLeft: 'auto'}}>Hello, World!</Text>
</View>
Этот подход демонстрируется в контексте Интернета и реального CSS на https://stackoverflow.com/a/34063808/1709587 .
<View>
<Text style={{position: 'absolute', right: 0}}>Hello, World!</Text>
</View>
Как и в реальном CSS, это берет Text
«вне потока», то есть его братья и сестры смогут перекрывать его, и его вертикальное положение будет View
по умолчанию сверху (хотя вы можете явно установить расстояние от вершины View
используя top
свойство style).
Естественно, какой из этих различных подходов вы хотите использовать - и будет ли вообще важен выбор между ними - будет зависеть от ваших конкретных обстоятельств.
justifyContent
,alignItems
,alignSelf
. Интересно, что правильно.