01 - 设置投影
给组件view设置投影时,需要特别设置的参数:
elevation: 5,
02 - 垂直滚动
在 swiper 组件中,Android 不支持垂直方向的上下滚动,只能水平方向左右滚动,可以单独设置组件旋转一定角度,从而实现垂直滚动
03 - scrollview 相关
Android平台,scrollview 不支持包含多个子view,只能包含一个子view,否则可能导致子view显示不全
scrollview 中包含 flatlist 布局时,会导致滑动冲突,flatlist手势触摸滑动无响应,scrollview拦截了触摸事件
解决方式:
在onTouchStart
和 onScrollEndDrag
方法中,设置scrollview是否响应,调用方法:
onScrollEndDrag={()=>{this.props.callback(true);}}
onTouchStart(event) {
this.props.callback(false);
return true;
}
在整个手势触摸滑动过程中,Android平台监听不到
onTouchEnd
事件
04 - RefreshControl 组件
Android平台,下拉刷新组件样式是实心的圆圈,且整个界面不会随着下拉动作滑动,只有 activity 响应下拉动作
目前,下拉刷新组件支持自定义样式的资源不是很多,也不能保证两个平台都支持
05 - keyboard键盘监听事件
文本输入框中,调起或收缩键盘时,Android平台不能监听到
keyboardWillShow
或keyboardWillHide
事件,只能监听到keyboardDidShow
或keyboardDidHide
事件,所以监听键盘时处理的动作,会响应的相对慢一点
06 - 键盘遮挡输入框的问题
FaceBook官方提供的解决方案是 KeyboardAvoidingView 这个组件使用上有些问题,暂时不推荐使用这个组件解决键盘遮挡的问题。关于KeyboardAvoidingView的使用相关。
比较有效,而且两个平台都兼容的方式,还是计算组件坐标,再刷新组件的样式这种方法。具体使用方法可以参照我写的另一篇08-关于refs,提取自定义控件的坐标
07 - 设置分割线的高度
当分割线的高度设置在0 ~ 1之间时,受屏幕分辨率的影响,分割线显示的高度会分布不均匀,需要单独判断屏幕分辨率做计算
/**
* 线的宽带
*
* @static
* @memberof AppUtils
*/
static getLineWidthOrHeight() {
// 返回设备的像素密度,例如:
// PixelRatio.get() === 1 mdpi Android 设备 (160 dpi)
// PixelRatio.get() === 1.5 hdpi Android 设备 (240 dpi)
// PixelRatio.get() === 2 iPhone 4, 4S iPhone 5, 5c, 5s iPhone 6 xhdpi Android 设备 (320 dpi)
// PixelRatio.get() === 3 iPhone 6 plus xxhdpi Android 设备 (480 dpi)
// PixelRatio.get() === 3.5 Nexus 6
let lineWidthOrHeight = 0;
if (PixelRatio.get() < 2) {
// 1 1.5
lineWidthOrHeight = 1;
} else if (PixelRatio.get() < 3) {
// 2
lineWidthOrHeight = 0.5;
} else {
// 3 3.5
if (this.isAndroidPlatform()) {
lineWidthOrHeight = 0.5;
} else {
lineWidthOrHeight = 0.333333333;
}
}
return lineWidthOrHeight;
}
08 - 针对 react-native: 0.55.4
版, 使用 setState
或给 state
赋值的问题
- 问题主要出现在涉及文本输入框组件中。
比如,在输入文本时,实时监听文本内态,并将文本内容做一些赋值处理
onChangeText = text => {
this.state.companyName = text; //iOS端会出现无法输入汉字的现象,Andriod端正常
//this.companyName = text;//iOS端正常,Andriod端正常
this.changeBtnColor(text); //这里会去调setState
};
- 另外,设置
TextInput
的defaultValue
或value
页会有点小问题 -
defaultValue
,即默认值,应该是给TextInput
初始化赋值的时候使用 -
value
,非初始化值,常用在ref
相关获取组件里的内容时使用 -
value
在TextInput
中使用时,最好不要实时去调用setState
,否则会出现无法输入内容的问题
<TextInput
maxLength={50}
autoFocus={true}
textAlign="center"
onChangeText={this.onChangeText.bind(this)}
defaultValue={this.state.companyName} //最好不要用 value 属性
/>
网友评论