2016-11-17 2 views
1

Я пытаюсь укоротить экран, когда клавиатура активна. Но он всегда приспосабливает это странно к андроиду, он отлично работает в iOS. Перед клавиатурой активен:Регулировка по высоте, когда клавиатура отображается неправильно, в андроиде с поддержкой реакции

После клавиатуры активен:

Я использую RN 0,37, это также происходит, когда я начинаю с нуля:

Этот мой код:

import React from 'react'; 

import { 
    Keyboard, 
    Dimensions, 
    ScrollView, 
    StyleSheet, 
    Text, 
    TextInput, 
    AppRegistry 
} from 'react-native'; 

var {height, width} = Dimensions.get('window'); 
var _keyboardWillShowSubscription; 
var _keyboardWillHideSubscription; 
height = height - 20; 

class awesomeproject extends React.Component { 
    constructor(props) { 
     super(props); 
     this.state = { 
      height: height, 
     }; 
    } 
    componentDidMount() { 
     _keyboardWillShowSubscription = Keyboard.addListener('keyboardDidShow', (e) => this._keyboardWillShow(e)); 
     _keyboardWillHideSubscription = Keyboard.addListener('keyboardDidHide', (e) => this._keyboardWillHide(e)); 
    } 
    componentWillUnmount() { 
     _keyboardWillShowSubscription.remove(); 
     _keyboardWillHideSubscription.remove(); 
    } 
    _keyboardWillShow(e) { 
     this.setState({height: height - e.endCoordinates.height}); 
    } 
    _keyboardWillHide(e) { 
     this.setState({height: height}); 
    } 
    render() { 
    return (
     <View style={{height: this.state.height}}> 
      <View style={{backgroundColor: 'blue', flex: 1}} /> 
      <View style={styles.fieldBox}> 
       <TextInput 
        style={styles.field} 
        placeholder={'hello'} 
        autoCapitalize={'none'} 
        placeholderTextColor={'#afbccc'} 
        blurOnSubmit={false} 
        autoCorrect={false} 
        ref={'textinput'} 
        onChangeText={(data) => this.setState({message: data})} /> 
      </View> 
     </View> 
    ); 
    } 
} 

const styles = StyleSheet.create({ 
    field: { 
     color:'black', 
     fontWeight:'bold', 
     fontSize:18, 
     flex: 1, 
     marginHorizontal: 10 
    }, 
}); 

AppRegistry.registerComponent('awesomeproject',() => awesomeproject); 
+0

ли у найти решение? Я думаю, что клавиатура высока больше в andoird. Я столкнулся с той же проблемой – Vicky

ответ

0

В andoird вычисленная высоты больше я думаю .for моего требования я удалить e.endCorordinaets.height и положить его 0.

Вид авто в andorid.So изменяет размер и не знаю этот SetState в андроиде. Не нужно менять высоту в andorid. Он будет работать автоматически, но я думаю, что это нужно для работы в ios. поэтому удалите изменение высоты и проверьте, не изменилось ли изображение.

Удалить этот

this.setState({height: height - e.endCoordinates.height}); 
+0

Привет @Vicky, я исправил ее, удалив все события клавиатуры в целом и добавив 'android: windowSoftInputMode =" adjustResize "на мой Android Manifest android/app/src/main/AndroidManifest.xml, поскольку он происходит только на Android. –