Red de conocimientos turísticos - Conocimientos sobre calendario chino - Cómo usar ReactNative para implementar un menú de cajón inferior de control personalizado

Cómo usar ReactNative para implementar un menú de cajón inferior de control personalizado

Esta publicación se centra en el ejemplo del menú del cajón en la parte inferior del control personalizado de React Native. Ahora lo compartiré contigo y te daré una referencia.

I. Análisis de requisitos

En el desarrollo nativo, se puede decir que la personalización de vistas es común. En muchos casos, los controles del sistema no siempre satisfacen las necesidades reales. Varios diseños de productos requieren que hagamos diferentes vistas. Hay muchas publicaciones de blog en Internet sobre la personalización de Vistas. Esta publicación de blog compartirá con usted cómo personalizar componentes en React Native para lograr el efecto de los controles del menú del cajón. La importancia de compartir funciones en las aplicaciones debe ser evidente, entonces, ¿cómo lograr este efecto en RN?

La biblioteca del sistema React Native solo proporciona una implementación de IOS, ActionSheetIOS. Hay dos implementaciones para la visualización de este control:

(1) showActionSheetWithOptions

(2) showShareActionSheetWithOptions

La primera implementación es mostrar la ventana emergente ActionSheet. en la caja del dispositivo iOS. La segunda implementación muestra una ventana emergente para compartir en el dispositivo iOS. Tomando prestada la descripción de la imagen oficial es la siguiente:

Se ha proporcionado el sistema de implementación en dispositivos IOS. A continuación, debemos adaptarnos a Android. En el desarrollo nativo, personalizar la Vista también es un proceso básico:

(1) Personalice la clase de control y herede la Vista o el control del sistema.

(2) Propiedades personalizadas

(3) Obtener propiedades personalizadas e inicializar una serie de clases de herramientas

(4) Sobrecargar el método onMeasure para medir el control

(5) Si se trata de un diseño personalizado, también debe sobrecargar onLayout para el diseño.

En React Native, el concepto de componentes personalizados es básicamente similar a la personalización nativa. Entonces, siguiendo este proceso, podremos implementarlo paso a paso.

II. Implementación de funciones

1. Implementación de componentes personalizados Componente

exportar la clase predeterminada AndroidActionSheet extiende los atributos personalizados

/ / 1. Declare las propiedades requeridas

static propTypes= {

título: React.PropTypes.string, // título

contenido: React.PropTypes objeto, /. / contenido

mostrar: func, // mostrar

ocultar: React.PropTypes.func, // ocultar

}constructor(props) {

super(props);

this.translateY = 150

this.state = {

visible: falso,

p>

sheetAnim: new Animated.Value(this.translateY)

}

this.cancel = this.cancel.bind( this

);

}3. Implementar el diseño básico

/**

* Modal es la capa más externa y ScrollView es la capa de contenido

*/

render() {

const { visible, hojaAnim } = this

return(

lt; Modal

visible ={ visible }

transparente={ verdadero }

AnimationType="none"

onRequestClose={ this.cancel }

g .

gt;

lt; Ver estilo={ estilos.wrapper }gt

lt; TouchableOpacity estilo={ estilos.overlay } ={this .cancel}gt; /TouchableOpacitygt;

lt; Animated.View

style={[styles.bd, {height: this.translateY, {translateY, } transformar: {{translateY:sheetAnim}]}}gt;

{ this._renderTitle() }

lt ScrollView

horizontal={ true }

showsHorizontalScrollIndicator={ false }gt;

{this._renderContainer()}

lt;/ScrollViewgt

lt;/ Animado.Viewgt ; <

lt;/Viewgt

;

lt;/Modalgt;

)

} Puedes ver que definimos el diseño básico arriba, que utiliza el método _renderTitle() para representar el encabezado. sección mientras que el área de contenido se muestra como ScrollView y se puede desplazar horizontalmente, es decir, cuando el elemento del menú excede el ancho de la pantalla, puede deslizar el dedo horizontalmente para seleccionarlo. El método renderContainer se llama internamente para representar el menú:

/**

* Título

*/

_renderTitle() {

const { título, títuloStyle } = this.props

;

oter>