2016-03-29 30 views
1

Bir hatayı React Native'de bir giriş bileşeninde vurgularken bir android sorunu yaşıyor.React Yerel Android klavye vurgulayın metin sorunu

Normal messaging view

Şimdi Adding and sending text, text input in correct location

, sorun oluşur Eğer tutunmak zaman: Uygulamayı yeniden başlattığında, açmak ve giriş kutusunu ve türünü kapatıp şöyle mesajları gönderebilirsiniz ince

Fonksiyonlar metin vurgulamak için (böylece kopyalayabilirsiniz/yapıştır/kesilmiş metin):

Highlighted functionality shown at top which then breaks app view state functionality

Bunun gerçekleşmesinden sonra metin kutusunun kapatılması ve yeniden açılması aynı etkiye sahiptir (alt çubuk gezinme gösterilir). Klavyenin aktif olup olmadığına bakılmaksızın klavyenin küçültülmüş haliyle aşağıdaki metin ekrana getirildiğinden, artık klavyenin ekranın üzerine yerleştirilmiş gibi görünmektedir.

Bu yön, klavye için uygulama genelinde durumu nasıl bozuyor? Birisi, Android için en üstte görünen kopyala/yapıştır işlevselliğine nasıl baş edeceğimi veya bunlara nasıl erişeceğimi bildirebilir mi? Anlamsız olan şey, bu gerçekleştiğinde tüm uygulamanın klavye girişi için kırılmasıdır - uygulamayı yeniden başlatarak tekrar çalışmasını sağlayabilirsiniz.

ilgili kod aşağıda (sadece söylemek eksik bir şey var ise):

DeviceEventEmitter kodu: bileşeninde

componentDidMount: function(){ 
    let context = this, 

    DeviceEventEmitter.addListener('keyboardWillShow', function(e: Event) { 
     context.setState({ 
      height: context.listViewMaxHeight - e.endCoordinates.height + 50, 
     }); 
    }); 

    DeviceEventEmitter.addListener('keyboardWillHide', function(e: Event) { 
     context.setState({ 
      height: context.listViewMaxHeight, 
     }) 
    }); 
} 

TextInput bileşeni işlemek fonksiyonu:

 <View style={styles.textInputContainer}> 
      <TextInput 
      maxNumberOfLines={8} 
      multiline={true} 
      autoFocus={false} 
      editable={true} 
      numberOfLines= {5} 
      ref='textInput' 

      onChangeText={this.onChangeText} 
      style={[styles.textInput, {height: context.props.textInputHeight}]} 
      placeholder={context.props.placeholder} 
      placeholderTextColor="#5A5A5A" 
      value={context.state.text}/> 

      <Button 
       style={styles.sendButton} 
       onPress={this._onPress} 
       disabled={this.state.disabled}> 
      Send </Button> 
     </View> 
+0

Çoğu zaman klavyenin doğru şekilde davrandığını görmenin sorun olup olmadığından emin değilim, fakat klavyeWillHide ve keyboardWillShow'un Android için henüz uygulanmadığını düşünmüyorum. Ancak, keyboardDidShow ve keyboardDidHide. Bkz: https://github.com/facebook/react-native/issues/3468 – pinewood

+0

@ pinewood Yeh klavye çalışır, vurgulanan işlevsellik en üstte göründüğü gibi klavyeyi yazıp kapatabilirsiniz, böylece klavye Sorun bu. Vurgulanan metnin kırılması, klavyenin klavye olayı yayıcı setState yüksekliğinden bağımsız olarak gösterilmemesi durumunda, içeriğin içeriğin nereye geri döndüğü görünümünün yüksekliğidir. Eğer bunun için bir bileşen adı varsa, onun özelliklerini temel alarak durumu daha iyi yönetebilirim ve eğer etkinse –

+0

@ pinewood oh ve ben de DidShow ve DidHide'ı kullanmayı denedim, her ikisi de aynı işlevi görür. –

cevap

0

ana birinci Bu soruna bölüm düzeltmesi, keyboardWillShow ve keyboardWillHide yerine keyboardDidShow ve keyboardDidHide kullanıyordu.

<activity android:windowSoftInputMode="stateUnspecified|adjustPan" /> 

klavye ile konudur:

DeviceEventEmitter.addListener('keyboardDidShow', function(e: Event) { 
    context.setState({ 
     height: context.listViewMaxHeight - e.endCoordinates.height + 50, 
    }); 
}); 

DeviceEventEmitter.addListener('keyboardDidHide', function(e: Event) { 
    context.setState({ 
     height: context.listViewMaxHeight, 
    }) 
}); 

İkinci bileşen istenen klavye işlevselliği elde etmek tezahür uğraşmak emin olmaktır (siz @pinewood teşekkür), şu anda değiştirildi Ayrıca burada daha ayrıntılı - https://github.com/exponentjs/react-native-tab-navigator/issues/48