我试图在访问Camera Roll时遵循React Native文档。我试过在Modal Component中包装相机胶卷图像。当我按下'打开相机胶卷'按钮,HandleException
从底部出现'关闭模式'按钮可见,但 none 来自相机胶卷的图像。
当我没有将它包裹在Modal
中时,图像会出现,但它们会破坏我屏幕上所有组件的布局,这就是为什么我(不成功)试图放置它在Modal
。
此外,如果你能给我一些关于如何使图像可选择并且以3张图像/行显示的提示,我们将不胜感激。
Modal
答案 0 :(得分:1)
得到它,flex: 1
样式和<ScrollView>
需要contentContainerStyle
。看起来不太好,但照片显示。在reddit上归功于你/ Mingli91。
import React from 'react';
import { CameraRoll, Image, Modal, ScrollView, StyleSheet, Text, View } from 'react-native';
import { Button } from 'react-native-elements';
const Dimensions = require('Dimensions');
const window = Dimensions.get('window');
const screenWidth = window.width;
const screenHeight = window.height;
export default class AddEvent extends React.Component {
constructor(props){
super(props)
this.state = {
modalVisible: false,
photos: [],
}
}
getPhotos = () => {
CameraRoll.getPhotos({
first: 100,
})
.then(r => this.setState({ photos: r.edges }))
.catch((err) => {
alert('Error loading camera roll');
return;
});
}
openModal() {
this.getPhotos();
this.setState({modalVisible:true});
}
closeModal() {this.setState({modalVisible:false});}
static navigationOptions = ({ navigation }) => {
return {
headerTitle: (<Text>Camera Roll Test</Text>),
}
};
render(){
return (
<View>
<Modal style={styles.modal}
visible={this.state.modalVisible}
animationType={'slide'}
onRequestClose={() => this.closeModal()}>
<ScrollView style={{flex: 1}}
contentContainerStyle={{ height: 100, width: 300 }}>
{this.state.photos.map((p, i) => {
return (
<Image
key={i}
style={{width: 300, height: 100,}}
source={{ uri: p.node.image.uri }}/>
);
})}
</ScrollView>
<Button
onPress={() => this.closeModal()}
title="Close modal"/>
</Modal>
<Button
onPress={() => this.openModal()}/>
</View>
);
}
}
const styles = StyleSheet.create({
modal: {
flex: 1,
alignItems: 'center',
width: screenWidth,
height: screenHeight,
}
});
答案 1 :(得分:0)
如果您在 Android 10 上开始注意到这一点,请尝试将其添加到您的 AndroidManifest.xml
:
<application
...
android:requestLegacyExternalStorage="true" />
Android 正在转向“范围存储”。他们开始在 Android 10 中使用此功能,可选择通过将 android:requestLegacyExternalStorage="true"
添加到您的 AndroidManifest.xml
文件来选择退出。
但是,从 Android 11 开始,这是一项强制更改,您的 android:requestLegacyExternalStorage
值将被忽略。
在此处阅读更多信息:
https://developer.android.com/training/data-storage/use-cases#opt-out-scoped-storage
在这里发帖是因为这是我们的问题,而且很难找到。