Нарисуйте горизонтальную линейку в React Native

97

Я пробовал пакет response-native-hr - у меня не работает ни на Android, ни на iOS.

Следующий код также не подходит, потому что он отображает три точки в конце

<Text numberOfLines={1}}>               
    ______________________________________________________________
</Text>
гамкинс
источник
<Text> __________ Уровень {level} __________ </Text>
Омар Бахш

Ответы:

296

Вы можете просто использовать пустой View с нижней границей.

<View
  style={{
    borderBottomColor: 'black',
    borderBottomWidth: 1,
  }}
/>
Антуан Грандшан
источник
49
Рекомендую borderBottomWidth: StyleSheet.hairlineWidth:)
Райан Перджент
16
если это не сработает, подумайте о добавлении alignSelf: stretch.
Scientist1642
1
вы должны указать значение WIDTH для представления.
Мохамед Бен Хартоуз
благодаря этому можно провести линию, но слева и справа есть запас. Я хочу закончить до конца
Абхи
@Abhi Это похоже на проблему, которая не связана с этим ответом. Пожалуйста, создайте новый вопрос, если вы не нашли решения
Antoine Grandchamp
22

Можно использовать поле, чтобы изменить ширину линии и разместить ее по центру.

import { StyleSheet } from 'react-native;
<View style = {styles.lineStyle} />

const styles = StyleSheet.create({
  lineStyle:{
        borderWidth: 0.5,
        borderColor:'black',
        margin:10,
   }
 });

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

Smit
источник
Спасибо. Вы могли бы также просто, <View style = {styles.lineStyle} />поскольку между ними нет ничего ;-)
Мартин Нордстрем
Смит styles.lineStyleсоответствовал бы const styles = StyleSheet.create({ lineStyle: ... });здесь. У вас просто есть то, lineStyle = { ...}что может вызвать проблемы. Полное решение styles.lineStyleможет быть const styles = StyleSheet.create({ lineStyle: { borderWidth: 0.5, borderColor: 'black', margin: 10 } });.
kevr
да уж. ты прав. здесь я предполагаю, что вы поместили lineStyleв свою таблицу стилей.
Smit
12

У меня недавно была эта проблема.

<Text style={styles.textRegister}> ────────  Register With  ────────</Text>

с этим результатом:

Образ

Мартин Чиноме
источник
25
Это плохо масштабируется
Петрус Терон
так просто, как, что.
Сирадж Алам
@PetrusTheron, почему плохо масштабируется?
Nate Glenn
Дефис @NateGlenn будет переноситься на узкий экран или казаться слишком тонким на более широком.
Петрус Терон
Ах, в этом есть смысл. Я думаю, что решение подойдет, если вам нужна только очень короткая строка.
Nate Glenn
9

Я сделал это вот так. Надеюсь это поможет

<View style={styles.hairline} />
<Text style={styles.loginButtonBelowText1}>OR</Text>
<View style={styles.hairline} />

для стиля:

hairline: {
  backgroundColor: '#A2A2A2',
  height: 2,
  width: 165
},

loginButtonBelowText1: {
  fontFamily: 'AvenirNext-Bold',
  fontSize: 14,
  paddingHorizontal: 5,
  alignSelf: 'center',
  color: '#A2A2A2'
},
зарин упрети
источник
Думаю, это лучшее решение. Лучше, чем использовать границу, как другие ответы.
Эрик М. Шпренгель
Ширина жесткого кодирования может быть проблемой.
Годфри
9

Мне удалось нарисовать разделитель со flexboxсвойствами даже с текстом в центре строки.

<View style={{flexDirection: 'row', alignItems: 'center'}}>
  <View style={{flex: 1, height: 1, backgroundColor: 'black'}} />
  <View>
    <Text style={{width: 50, textAlign: 'center'}}>Hello</Text>
  </View>
  <View style={{flex: 1, height: 1, backgroundColor: 'black'}} />
</View>

введите описание изображения здесь

Азхар Зафар
источник
1
Это лучший ответ, он масштабируется, и если вы не установите ширину текста, он будет динамическим
newoda
5

Вы также можете попробовать react-native-hr-component

npm i react-native-hr-component --save

Ваш код:

import Hr from 'react-native-hr-component'

//..

<Hr text="Some Text" fontSize={5} lineColor="#eee" textPadding={5} textStyles={yourCustomStyles} hrStyles={yourCustomHRStyles} />
Mehulmpt
источник
4
Это немного перебор
Led
3

Это обновленный до сегодняшнего дня код React Native (JSX):

<View style = {styles.viewStyleForLine}></View>

const styles = StyleSheet.create({
viewStyleForLine: {
    borderBottomColor: "black", 
    borderBottomWidth: StyleSheet.hairlineWidth, 
    alignSelf:'stretch',
    width: "100%"
  }
})

вы можете использовать один alignSelf:'stretch'или width: "100%"оба должны работать ... и,

borderBottomWidth: StyleSheet.hairlineWidth

вот StyleSheet.hairlineWidthсамый тонкий, значит,

borderBottomWidth: 1,

и так далее, чтобы увеличить толщину линии.

Sree
источник
3

У Lineменя сработало создание многоразового компонента:

import React from 'react';
import { View } from 'react-native';

export default function Line() {
    return (
        <View style={{
            height: 1,
            backgroundColor: 'rgba(255, 255, 255 ,0.3)',
            alignSelf: 'stretch'
        }} />
    )
}

Теперь импортируйте и используйте Lineгде угодно:

<Line />
Мохаммад Заид Патан
источник
2
import { View, Dimensions } from 'react-native'

var { width, height } = Dimensions.get('window')

// Create Component

<View style={{
   borderBottomColor: 'black', 
   borderBottomWidth: 0.5, 
   width: width - 20,}}>
</View>
Филип Илиевски
источник
2

Вы можете использовать собственный разделитель элементов.

Установите его с помощью:

npm install --save react-native-elements
# or with yarn
yarn add react-native-elements

import { Divider } from 'react-native-elements'

Тогда идите с:

<Divider style={{ backgroundColor: 'blue' }} />

Источник

Shanthan
источник
2
Установка всего пакета (и, вероятно, большого) кажется излишним, если вам нужна только горизонтальная линия.
Сэнди
Конечно, если вы будете использовать только <Divider /> компонент, это будет излишним , однако вы должны использовать библиотеку в любом случае, чтобы сэкономить время на стилизации простых кнопок, панелей поиска и т.д ... и т.д. react-native-elements.github.io/react-native-elements
jso1919,
1

Почему бы тебе не сделать что-нибудь подобное?

<View
  style={{
    borderBottomWidth: 1,
    borderBottomColor: 'black',
    width: 400,
  }}
/>
Виктор Сеч
источник
0

Может быть, вам стоит попробовать использовать response-native-hr что-то вроде этого:

<Hr lineColor='#b3b3b3'/>

документация: https://www.npmjs.com/package/react-native-hr

Дж. Дорриан
источник
глядя на проблемы с репо, он не кажется таким «активным» и актуальным с точки зрения зависимостей :(
Сделано в Moon
0
import {Dimensions} from 'react-native'

const { width, height } = Dimensions.get('window')

<View
  style={{
         borderBottomColor: '#1D3E5E',
         borderBottomWidth: 1,
         width : width , 
  }}
/>
Мохамед Бен Хартуз
источник
Код настолько ясен для тех, у кого есть такая проблема, поэтому, если я могу объяснить больше, я сделаю это.
Мохамед Бен Хартуз
0

Вот как я решил разделитель с горизонтальными линиями и текстом в середине:

<View style={styles.divider}>
  <View style={styles.hrLine} />
  <Text style={styles.dividerText}>OR</Text>
  <View style={styles.hrLine} />
</View>

И стили для этого:

import { Dimensions, StyleSheet } from 'react-native'

const { width } = Dimensions.get('window')

const styles = StyleSheet.create({
divider: {
    flexDirection: 'row',
    alignItems: 'center',
    marginTop: 10,
  },
  hrLine: {
    width: width / 3.5,
    backgroundColor: 'white',
    height: 1,
  },
  dividerText: {
    color: 'white',
    textAlign: 'center',
    width: width / 8,
  },
})
Ласло
источник
0

Просто создайте компонент View, который имеет небольшую высоту.

<View style={{backgroundColor:'black', height:10}}/>
Хранитель парка
источник
0

Если у вас сплошной фон (например, белый), это может быть вашим решением:

<View style={container}>
  <View style={styles.hr} />
  <Text style={styles.or}>or</Text>
</View>

const styles = StyleSheet.create({
  container: {
    flex: 0,
    backgroundColor: '#FFFFFF',
    width: '100%',
  },
  hr: {
    position: 'relative',
    top: 11,
    borderBottomColor: '#000000',
    borderBottomWidth: 1,
  },
  or: {
    width: 30,
    fontSize: 14,
    textAlign: 'center',
    alignSelf: 'center',
    backgroundColor: '#FFFFFF',
  },
});
Дариус Рейнис
источник