es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

React Native Textinput: ¿existe alguna forma de animar el marcador de posición para convertirlo en una etiqueta?

Estoy utilizando TextInput en mi aplicación de React Native. Quiero tener texto como marcador de posición que se anime hasta convertirse en una etiqueta en la parte superior izquierda cuando el usuario hace clic en el TextInput. La etiqueta Company Name en la imagen a continuación muestra el tipo de etiqueta “superior izquierda” que deseo. ¿Hay algún componente en React Native, ya sea el TextInput nativo u otro, que haga esto?

Imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una opción para lograr el efecto deseado sería utilizar la API Animated de React Native. Puedes crear un Animated.View que contenga tanto el TextInput como la etiqueta de marcador, y luego utilizar la propiedad translateY para animar la etiqueta hacia arriba cuando el TextInput reciba el enfoque. Aquí tienes un ejemplo:

    import React, { useState } from 'react';
    import { View, TextInput, Text, Animated } from 'react-native';
    
    const AnimatedTextInput = ({ label, ...props }) => {
      const [isFocused, setIsFocused] = useState(false);
      const animatedValue = new Animated.Value(0);
    
      const handleFocus = () => {
        setIsFocused(true);
        Animated.timing(animatedValue, {
          toValue: 1,
          duration: 200,
          useNativeDriver: true,
        }).start();
      };
    
      const handleBlur = () => {
        setIsFocused(false);
        Animated.timing(animatedValue, {
          toValue: 0,
          duration: 200,
          useNativeDriver: true,
        }).start();
      };
    
      const translateY = animatedValue.interpolate({
        inputRange: [0, 1],
        outputRange: [24, -8],
      });
    
      return (
        <view style="{{" paddingtop:="" 24="" }}="">
          <animated.view style="{{" transform:="" [{="" translatey="" }]="" }}="">
            <text style="{{" position:="" 'absolute',="" left:="" 12,="" color:="" isfocused="" '#aaa'="" :="" '#bbb'="" }}="">
              {label}
            </text>
          </animated.view>
          <textinput {...props}="" style="{{" borderwidth:="" 1,="" bordercolor:="" '#ccc',="" padding:="" 8="" }}="" onfocus="{handleFocus}" onblur="{handleBlur}"></textinput>
        </view>
      );
    };
    
    export default AnimatedTextInput;
    

    Luego puedes utilizar este componente de la siguiente manera:

    <animatedtextinput label="Nombre de la empresa" placeholder="Ingresa el nombre de tu empresa"></animatedtextinput>
    

    Esto producirá un TextInput con un marcador animado hacia arriba para convertirse en una etiqueta cuando el usuario haga clic en él, similar al ejemplo que proporcionaste. Puedes personalizar la duración de la animación o los estilos de la etiqueta y el input según sea necesario.

Comments are closed.