編輯:關於Android編程
PS: 入門階段,加上是Android菜鳥,所以先閱讀他們的文檔作為學習,幸好他們的文檔寫得夠詳細,非常適合我這種小白菜鳥用戶。我主要是看他們的developer_guide_android.pdf文檔(在下載包的docs目錄下)。
開發環境
Android Studio
我自己用的是Android Studio 2.1.1, 也恰好和文檔中示例的開發環境一致。
准備工作:
1. 新建一個Android工程
打開Android Studio,點擊“File -> New -> New Project…”, 然後填寫工程名稱, 這裡我用RenderPDF, 如下所示。點擊Next.
選擇在”Phone and Tablet”上來跑該app. 最低的SDK版本選擇:API 8: Android 2.2. 這樣基本可以支持所有的android設備。點擊Next.
為了簡單起見,這裡選擇“Empty Activity”. 點擊Next.
使用默認的Activity如下圖所示:
2. 導入Foxit的SDK庫
拷貝下載包中libs文件夾下的 FoxitRDKUIExtensions.aar文件和x86, arm64-v8a, armeabi-v7a文件夾到 ”RenderPDF\app\libs”.
PS: 這裡我把三種架構的庫都拷貝過去了,你也可以根據你使用的真機或者模擬器的架構選擇對應的庫。
拷貝到”RenderPDF\app\libs”目錄下後,在Android Studio中,工程app\libs下面就可以看到它們了,如下圖:
這裡我們僅僅是把庫放到了工程裡面,並沒有對庫進行引用,那下面自然是要開始進行相關的配置工作了。打開app下面的“build.gradle”文件,進行如下操作:
a) 添加對”librdk.so”( x86/arm64-v8a/armeabi-v7a文件夾下的librdk.so)的引用:<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwcmUgY2xhc3M9"brush:java;">
android {
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
}
b) 添加對”FoxitRDKUIExtensions.aar”的引用
定義libs文件作為repository:
repositories { flatDir { dirs 'libs' } }
在dependencies中加入FoxitRDKUIExtensions.aar.
dependencies { compile (name:'FoxitRDKUIExtensions', ext:'aar') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' }
這裡附上整個“build.gradle”文件:
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.2" defaultConfig { applicationId "com.foxit.test_android" minSdkVersion 8 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } sourceSets { main { jniLibs.srcDirs = ['libs'] } } } repositories { flatDir { dirs 'libs' } } dependencies { compile (name:'FoxitRDKUIExtensions', ext:'aar') testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.4.0' }
PS:這裡按文檔說的,設置compileSdkVersion和targetSdkVersion為API 23.
配置完“build.gradle”文件後,點擊“Build -> Rebuild project”,然後在“\app\build\intermediates\explodedaar\FoxitRDKUIExtensions”下可以看到FoxitRDKUIExtensions.aar裡面具體信息了,如下圖:
至此,我們已經完成對Foxit SDK庫的引用,寫代碼前的准備工作已經完成,下面要開始寫代碼了。
PS: 我們是要渲染顯示一個PDF文檔,因此需要事先將文檔放到真機或者模擬器中。這裡我還是用getting_started_android.pdf文檔(太懶了,直接用現成的)。如果你不知道怎麼添加文檔,請參考第一篇Foxit Mobile PDF SDK for Android_初始(1)。
3. 寫代碼:渲染顯示PDF文檔
真的只有幾行代碼就可以實現哦,接著往下看。
所有非界面的代碼我都寫在”RenderPDF\app\src\main\java\com\test\renderpdf\MainActivity.java”中。
首先,初始化SDK庫
導入頭文件:
import com.foxit.sdk.common.Library; import com.foxit.sdk.common.PDFException;
添加初始化SDK庫的代碼:
System.loadLibrary("rdk"); try { Library.init("sn", "key"); } catch (PDFException e) { e.printStackTrace(); return; }
sn和key是一串比較長的字符串,大家可以到libs目錄下的rdk_sn.txt和rdk_key.txt文件中copy過來,或者從demo中copy。
在主界面上面添加PDFViewCtrl
在“app/src/main/res/layout/activity_main.xml”中添加如下代碼:
加載文檔以及渲染顯示文檔
在“MainActivity.java”中,實例化一個PDFDoc對象用來加載文檔,然後實例化一個PDFViewCtrl對象用來顯示加載的文檔,代碼如下:
PS: 官方文檔中稱將MainActivity從繼承自AppCompatActivity改為FragmentActivity, 因為內置UI extensions組件中有用到FragmentActivity的特性。雖然這裡還沒有用到所謂的UI extensions組件,為了後面繼續學習,這裡就先改了哈。
package com.test.renderpdf; import android.support.v4.app.FragmentActivity; import android.os.Bundle; import com.foxit.sdk.common.Library; import com.foxit.sdk.common.PDFException; import com.foxit.sdk.PDFViewCtrl; import com.foxit.sdk.pdf.PDFDoc; public class MainActivity extends FragmentActivity { private PDFViewCtrl pdfViewCtrl = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); String sn = "Jm9uLlPzu31Xeg9DMkMCjTJ21fyDRcmmgsj6r1OpithuPTLmet8RLw=="; String key = "ezJvj90ntWp39JsXIV02hAneK+hiBbdSf8QJK/OtLsbugh81DetHZ2mytsJxCjTVbg84YCcakEMtqn5EtJylgi9le8qSQka+CDSUKaXx7mzfXeKeRXKUKWZo9YvjUdhJOZv4bEUVKon7M6A70Ewt+vi0EJCt8DruGsI5vzUdxjW335VDgrpdXP8WaXFHSunwmFerH/7lgYErxA/hpZK9keeo8lw/yWOVgnAByoIiaqaiQATSgyBMKRANkKp78H+oYWTdj7qNb5UNkq2sKordoCRjCmer5lSKOnEK5jPI7PETlNMi/vkWzSVndHCDNICQH7BaJWA+vwRJqW0E1m1vXXUizXeSuxmu3RtQk4QwYlgmE4cd6z2bl9RjLErHD2pi4y8je8opLN2Tziw+EgDhho1snyDbIWi3ynol2nv/1vt3x7CY7HpMZ1QrJNCv8z9OdGH0zc22RPU8hA47QE4ftH77kQvrjgWu1oZH07dseGrZxj5q+lvbMwZegKAHqXyzj7XDa7084FSQVRwE+vvA+0ZdjRCoJRf32RAmEbx4kF+cwIiDmQliFy+WphFmSKq8NYZA7c+pMRtWZaUHWk1hJ1XI7l175uQZb1WBNAIndRAXy5H3pettxGxIBrJqn4zfE7Kgyf5zvBWMr9+8KY0No1bRz5fHuds2XbiwzrVzV946uQJ1N+NPdX0Zy+u3LqXsskMXKBXseHQAO5g+b/ts4SXzLbSsHWPHCHGgv3wxH09+O2tQ3YH3sb48T6pbIj/oM6PzppRmC9YqIpfKpCZGvAcsYMU3sIHRmZOr5HxKC65VX3oX2CMlTXXJHH0wf9wFqIyxUGwFWL3EvsBo5UR282KDyquz74xgvyhM1F3FZQxD4UJgZBDJvr/mrpziFF3sUuXCjpCwDT2gC25VSng9sm2w5FIh7MjJsRlK+hPCn5tuYZcKzMJHQG9deNA5YwN6/f/KLlhxEJpzeWyiNA2PoV2CDt1hYLJeob+VVtirRNsZI447ym2hCBkjdd7uru3LweWVpPzWTdP3/2a7JkuGPJbhIKYu6LsK5I6ghCfE0vvPR3Ne+aHk97+ytZRJHI8RDGujE5yQ0BIrP0u9ZuTQvPq8xSGJFWHDLsVgxMG0b2I+6jnSBoUo/cJDFT/dNID1anbesGHL73waVHDN0U5cR34Ry97dSBjoD6wgF8UR8roPmbEYNp7GVRrSbenJHQ=="; // Load "librdk.so" library. System.loadLibrary("rdk"); try { // initialize the library Library.init(sn, key); } catch (PDFException e) { e.printStackTrace(); return; } // Inflate the view and get a reference to PDFViewCtrl setContentView(R.layout.activity_main); pdfViewCtrl = (PDFViewCtrl) findViewById(R.id.pdfviewer); // Load a document String path = "/mnt/sdcard/getting_started_android.pdf"; try { PDFDoc document = PDFDoc.createFromFilePath(path); document.load(null); pdfViewCtrl.setDoc(document); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void onDestroy() { super.onDestroy(); try { Library.release(); } catch (PDFException e) { e.printStackTrace(); } } @Override protected void onResume() { super.onResume(); if(pdfViewCtrl != null) pdfViewCtrl.requestLayout(); } }
就這些代碼就可以完成渲染一個PDF文檔,核心代碼加起來還不到10行,好像是挺酷的哦。跑起來看看效果。
PS: 因為要讀取真機或者模擬器中的文檔,所以要在“app/src/main/ AndroidManifest.xml”中設置用戶權限,允許用戶讀寫sdcard. 代碼如下:
其實是只用添加
這一句,為了方便閱讀,我都是把整個代碼都貼出來。
4. Run the app:
我用Android 4.4.2 (API 19) x86架構的模擬器來跑該app, 運行起來後如下圖:
這幾行代碼就可以實現一個簡單的PDF閱讀器了,還自帶有縮放和翻頁功能:
上面已經成功實現了渲染顯示PDF文檔的功能,真的只花了幾行代碼,大伙感興趣的可以試試。有一點大家要注意下,我這裡用的是API 19的模擬器來運行該app, 如果大家用API 23以上(包括23)的話,如果想讀取sdcard中的文檔,要麼需要添加代碼進行動態權限獲取,要麼可以把“app/build.gradle”下的targetSdkVersion 改為低於23的版本即可。
好了,今天就到這裡吧,後面將繼續學習。
上篇文章介紹了Android開發的設計理念的一部分,並沒有得到博友們的多大認可,只看到了一位博友在下面留言期待下一篇文章的發表,為了這小小的唯一支持,我決定繼續把後面的8
有網友安裝了“天天酷跑專用修改(超哥破解)”、“妖艷制作”和“讓任何人都驚喜的東西”
今天要講得是Activity的四種啟動模式launchMode屬性,該屬性用於配置該Activity的加載模式,該屬性支持以下4個屬性值。standard:標准模式,也是
在網絡加載數據的時候通常需要很多時間,這個時候程序裡面經常需要寫一個提示正在加載數據的彈窗,這篇文章用兩種方式實現帶動畫效果的Dialog:幀動畫實現和GIF動態圖實現,