[React Native]訪問(wèn)操作系統(tǒng)剪貼板 Clipboard

Android Studio比Eclipse ADT有巨大的優(yōu)勢(shì)。
Android Studio原生支持使用Gradle來(lái)構(gòu)建項(xiàng)目,使用動(dòng)態(tài)語(yǔ)言Groovy定義項(xiàng)目構(gòu)建的過(guò)程,避免了build.xml文件繁瑣的定義。

然而使用的時(shí)候,卻有著巨大的缺陷。由于Android Studio在升級(jí)的時(shí)候,可能會(huì)伴隨著Gradle版本的升級(jí),Gradle就會(huì)產(chǎn)生若干的版本。

為了保證程序不會(huì)因?yàn)镚radle版本不同導(dǎo)致問(wèn)題,又產(chǎn)生了Gradle Wrapper,它的作用就是讓項(xiàng)目綁定一個(gè)Gradle版本,當(dāng)我們導(dǎo)入項(xiàng)目時(shí),會(huì)自動(dòng)下載相應(yīng)的Gradle版本。

然,并,卵。 問(wèn)題來(lái)了

這就導(dǎo)致我們?cè)诖蜷_(kāi)其它項(xiàng)目的時(shí)候,如果當(dāng)前電腦沒(méi)有該項(xiàng)目配置的Gradle版本就會(huì)下載相應(yīng)的Gradle版本。但是Gradle的二進(jìn)制包較大,又加上鏈接的是國(guó)外服務(wù)器,導(dǎo)致國(guó)內(nèi)基本很難下載下來(lái), 這時(shí)候后就會(huì)出現(xiàn)下面的情況。

你不知道到底是AS死了,還是它確實(shí)在后臺(tái)做些什么……要么就耐著性子等,要么就直接關(guān)掉AS,而且必須是強(qiáng)制關(guān)閉。這一點(diǎn)做的非常不友善。實(shí)際上,之所以卡在這,就是因?yàn)楹笈_(tái)在服務(wù)器下載Gradle包。而這個(gè)Gradle包往往有幾十兆,在網(wǎng)絡(luò)環(huán)境不太好的情況下,可能要下很久才能完成。顯然,我們沒(méi)有這么多時(shí)間在這耗著,需要找個(gè)辦法來(lái)解決了。

解決方式一

當(dāng)你裝Android Studio和SDK時(shí), 肯定至少會(huì)裝一個(gè)Gradle,這時(shí)可以通過(guò)新建項(xiàng)目的方式,查詢到Gradle版本。

本地Gradle版本路徑也要知道, 打開(kāi)設(shè)置界面

還有幾個(gè)參數(shù)要記錄,這是和SDK匹配的,導(dǎo)入的項(xiàng)目中編譯SDK版本本機(jī)也要有。

記住這幾個(gè)參數(shù),然后把要導(dǎo)入項(xiàng)目的參數(shù)改成和當(dāng)前參數(shù)一致,就可以正常導(dǎo)入項(xiàng)目了。
來(lái)看看怎么修改:

- xxx-project/.idea/gradle.xml文件:
添加或修改<option name="gradleHome" value="前面的GradleHome參數(shù)" />

- 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‘ (這個(gè)是整個(gè)project的配置)

- xxx-project/app/build.gradle文件:
修改Compile SDK Version和Build Tools Version參數(shù)。(這個(gè)是單個(gè)module的配置,project中每個(gè)module都需要修改)

修改完了,就可以正常導(dǎo)入了。

如果電腦斷網(wǎng),可以直接導(dǎo)入項(xiàng)目,但是項(xiàng)目不能正常運(yùn)行,還是需要修改這些參數(shù)才能正常編譯。

解決方式二

上面最主要的問(wèn)題就是Gradle版本下載不下來(lái), 我們可以單獨(dú)下載指定的Gradle版本。
先可以查看項(xiàng)目依賴的gradle版本,


QQ20160905-4@2x.png

然后去找相應(yīng)的版本進(jìn)行下載。
https://pan.baidu.com/s/1pLEkm4F#path=%252F

Windows默認(rèn)把下載的文件放到C:\Users\xxx\.gradle\wrapper\dists目錄下


Paste_Image.png

mac默認(rèn)在/Users/apple/.gradle/wrapper/dists/

Paste_Image.png

我們之前學(xué)習(xí)了TextInput組件, 有時(shí)候我們需要在TextInput組件中復(fù)制或者粘貼一些文字。
React Native為開(kāi)發(fā)者提供了 Clipboard API,Clipboard 組件可以在iOS和Android的剪貼板中讀寫(xiě)內(nèi)容。目前還只支持獲取或者存放字符串。

主要方法

static getString()
獲取剪貼板的文本內(nèi)容,返回一個(gè)Promise(后面會(huì)介紹)
你可以用下面的方式來(lái)調(diào)用。
async _getContent() { var content = await Clipboard.getString(); }

static setString(content: string)
設(shè)置剪貼板的文本內(nèi)容。你可以用下面的方式來(lái)調(diào)用。
_setContent() { Clipboard.setString('hello world'); }

官方例子

代碼比較簡(jiǎn)單, 直接展示官方例子:

import React, {Component} from 'react';
import {
    AppRegistry,
    StyleSheet,
    View,
    Text,
    Clipboard
} from 'react-native';

class AwesomeProject extends Component {
    state = {
        content: 'Content will appear here'
    };
    //異步函數(shù) 箭頭函數(shù)不需要綁定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);

運(yùn)行結(jié)果:

更多精彩請(qǐng)關(guān)注微信公眾賬號(hào)likeDev


likeDev.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容