美文网首页React Native程序员React Native
[React Native]访问操作系统剪贴板 Clipboar

[React Native]访问操作系统剪贴板 Clipboar

作者: 于连林520wcf | 来源:发表于2016-08-31 16:17 被阅读705次

    Android Studio比Eclipse ADT有巨大的优势。
    Android Studio原生支持使用Gradle来构建项目,使用动态语言Groovy定义项目构建的过程,避免了build.xml文件繁琐的定义。

    然而使用的时候,却有着巨大的缺陷。由于Android Studio在升级的时候,可能会伴随着Gradle版本的升级,Gradle就会产生若干的版本。

    为了保证程序不会因为Gradle版本不同导致问题,又产生了Gradle Wrapper,它的作用就是让项目绑定一个Gradle版本,当我们导入项目时,会自动下载相应的Gradle版本。

    然,并,卵。 问题来了

    这就导致我们在打开其它项目的时候,如果当前电脑没有该项目配置的Gradle版本就会下载相应的Gradle版本。但是Gradle的二进制包较大,又加上链接的是国外服务器,导致国内基本很难下载下来, 这时候后就会出现下面的情况。

    你不知道到底是AS死了,还是它确实在后台做些什么……要么就耐着性子等,要么就直接关掉AS,而且必须是强制关闭。这一点做的非常不友善。实际上,之所以卡在这,就是因为后台在服务器下载Gradle包。而这个Gradle包往往有几十兆,在网络环境不太好的情况下,可能要下很久才能完成。显然,我们没有这么多时间在这耗着,需要找个办法来解决了。

    解决方式一

    当你装Android Studio和SDK时, 肯定至少会装一个Gradle,这时可以通过新建项目的方式,查询到Gradle版本。

    本地Gradle版本路径也要知道, 打开设置界面

    还有几个参数要记录,这是和SDK匹配的,导入的项目中编译SDK版本本机也要有。

    记住这几个参数,然后把要导入项目的参数改成和当前参数一致,就可以正常导入项目了。
    来看看怎么修改:

    - xxx-project/.idea/gradle.xml文件:
    添加或修改<option name="gradleHome" value="前面的GradleHome参数" />
    
    - xxx-project/gradle/wrapper/gradle-wrapper.properties文件:
    distributionUrl=https\://services.gradle.org/distributions/gradle-前面的gradleVersion-all.zip
    
    - xxx-project/build.gradle文件:
    classpath ‘com.android.tools.build:gradle:前面Android Plugin Version‘ (这个是整个project的配置)
    
    - xxx-project/app/build.gradle文件:
    修改Compile SDK Version和Build Tools Version参数。(这个是单个module的配置,project中每个module都需要修改)
    

    修改完了,就可以正常导入了。

    如果电脑断网,可以直接导入项目,但是项目不能正常运行,还是需要修改这些参数才能正常编译。

    解决方式二

    上面最主要的问题就是Gradle版本下载不下来, 我们可以单独下载指定的Gradle版本。
    先可以查看项目依赖的gradle版本,


    QQ20160905-4@2x.png

    然后去找相应的版本进行下载。
    https://pan.baidu.com/s/1pLEkm4F#path=%252F

    Windows默认把下载的文件放到C:\Users\xxx\.gradle\wrapper\dists目录下


    Paste_Image.png

    mac默认在/Users/apple/.gradle/wrapper/dists/

    Paste_Image.png

    我们之前学习了TextInput组件, 有时候我们需要在TextInput组件中复制或者粘贴一些文字。
    React Native为开发者提供了 Clipboard API,Clipboard 组件可以在iOS和Android的剪贴板中读写内容。目前还只支持获取或者存放字符串。

    主要方法

    static getString()
    获取剪贴板的文本内容,返回一个Promise(后面会介绍)
    你可以用下面的方式来调用。
    async _getContent() { var content = await Clipboard.getString(); }

    static setString(content: string)
    设置剪贴板的文本内容。你可以用下面的方式来调用。
    _setContent() { Clipboard.setString('hello world'); }

    官方例子

    代码比较简单, 直接展示官方例子:

    import React, {Component} from 'react';
    import {
        AppRegistry,
        StyleSheet,
        View,
        Text,
        Clipboard
    } from 'react-native';
    
    class AwesomeProject extends Component {
        state = {
            content: 'Content will appear here'
        };
        //异步函数 箭头函数不需要绑定this了
        _setClipboardContent = async () => {
            Clipboard.setString('Hello World');
            try {
                var content = await Clipboard.getString();
                this.setState({content});
            } catch (e) {
                this.setState({content:e.message});
            }
        };
    
        render() {
            return (
                <View>
                    <Text onPress={this._setClipboardContent}
                          style={{color: 'blue',marginTop:100}}>
                        Tap to put "Hello World" in the clipboard
                    </Text>
                    <Text style={{color: 'red', marginTop: 20}}>
                        {this.state.content}
                    </Text>
                </View>
            );
        }
    }
    AppRegistry.registerComponent('AwesomeProject', () => AwesomeProject);
    

    运行结果:

    更多精彩请关注微信公众账号likeDev


    likeDev.jpg

    相关文章

      网友评论

        本文标题:[React Native]访问操作系统剪贴板 Clipboar

        本文链接:https://www.haomeiwen.com/subject/ufoqettx.html