篇文章我看過覺得特別有感悟,現在推薦給大家,我在這篇文章中學習到很多,希望看完大家也能有所提升。
作者:依然范特稀西
鏈接:https://www.jianshu.com/p/17bb1c36eacb
在今年的Google/IO大會上,亮相了一個全新的 Android 原生 UI 開發框架-Jetpack Compose, 與蘋果的SwiftIUI一樣,Jetpack Compose是一個聲明式的UI框架,隨著了今年安卓和蘋果兩大移動平臺相繼推出自己的UI開發框架Jetpack Compose 和SwiftIUI,標志著移動操作系統正式全面擁抱聲明式 UI 開發模式。
其實聲明式 UI 并不是什么新技術,早在 2006 年,微軟就已經發布了其新一代界面開發框架 WPF,其采用了 XAML 標記語言,支持雙向數據綁定、可復用模板等特性。
2010 年,由諾基亞領導的 Qt 團隊也正式發布了其下一代界面解決方案 Qt Quick,同樣也是聲明式,甚至 Qt Quick 起初的名字就是 Qt Declarative。QML 語言同樣支持數據綁定、模塊化等特性,此外還支持內置 JavaScript,開發者只用 QML 就可以開發出簡單的帶交互的原型應用。
聲明式 UI 框架近年來飛速發展,并且被 Web 開發帶向高潮。React 更是為聲明式 UI 奠定了堅實基礎并一直引領其未來的發展。隨后 Flutter 的發布也將聲明式 UI 的思想成功帶到移動端開發領域...
聲明式UI的意思就是,描述你想要一個什么樣的UI界面,狀態變化時,界面按照先前描述的重新“渲染”即可得到狀態絕對正確的界面,而不用像命令一樣,告訴程序一步一步該干什么,維護各種狀態。扯遠了,這個并不是今天文章的重點,稍微了解一下就好,其他的就不在本文延伸。關于聲明式的更多介紹,建議看看這篇文章:https://zhuanlan.zhihu.com/p/68275232
我們回到本文的重點Jetpack Compose。
Jetpack Compose 是一個用于構建原生Android UI 的現代化工具包,它基于聲明式的編程模型,因此你可以簡單地描述UI的外觀,而Compose則負責其余的工作-當狀態發生改變時,你的UI將自動更新。由于Compose基于Kotlin構建,因此可以與Java編程語言完全互操作,并且可以直接訪問所有Android和Jetpack API。它與現有的UI工具包也是完全兼容的,因此你可以混合原來的View和現在新的View,并且從一開始就使用Material和動畫進行設計。
需要這方面資料的可以私信(進階),我分享給你
每當我們學習一門新的語言,我們都是從一個hello world開始,今天我們也從一個hello world來開始Jetpack Compose 吧! 要想獲得Jetpack Compose 的最佳體驗,我們需要下載最新版本的Android Studio 預覽版本(即Android Studio 4.0)。因為Android Studio 4.0 添加了對Jetpack Compose 的支持,如新的Compose 模版和Compose 及時預覽。
使用Jetpack Compose 來開始你的開發工作有2種方式:
接下來分別介紹一下這兩種方式。
如果你想在現有的項目中使用Jetpack Compose,你需要配置一些必須的設置和依賴:
(1)gradle 配置
超輕量看圖神器:快圖回頂部
這年頭IT業界流行著一股風氣,那就是似乎什么東西都喜歡做得特別大。尤其是手機這塊,無論是軟硬件皆是如此。手機的尺寸早已經大到平板級別,而手機App的大小也隨著時代水漲船高,想要聊個天付個款,都得被廠商塞個二十幾三十多M進手機。手機App體積膨脹已是常態,但并不是所有人都喜歡享受閃存被撐爆系統被卡爆的雙重快感的,那么這年頭還有沒有保持苗條身材的App呢?體積小不等于功能弱,體積大也可以是廢材,今天,就讓小編來為大家推薦一些體積不到1M的超袖珍的實用App吧!
超輕量看圖神器:快圖
軟件名稱: | 快圖瀏覽 |
軟件版本: | 4.2 |
軟件大小: | 1.01MB |
軟件授權: | 免費 |
適用平臺: | Android |
下載地址: | http://dl.pconline.com.cn/download/79062.html |
如果什么東西敢冠上一個正面意義上的“最”字,拉滿仇恨被人狂噴是分分鐘的事情;但如果小編說,快圖是安卓平臺上最好的看圖App,相信沒有什么人會反對??靾D自誕生以來就是安卓不可或缺的裝機App之一,受困于安卓腦殘的圖片管理機制,用戶不得不尋找第三方的圖庫應用,快圖則一直都是最好的選擇。
快圖界面,使用了安卓5.0的Material Design
快圖的歷史并不短,但即使歷經數年成長,體積也沒漲到哪里去,至今仍僅有900多K(精簡掉網盤功能的話更是僅有400多K!)。輕巧的體積帶來了靈動的體驗,無論是響應速度還是流暢度,快圖一直代表著看圖App的最高級別水準。
支持主題更換,還有WiFi快傳這樣的非常實用的功能
同時,快圖的功能還能令各家廠商汗顏,900多K的體積能做到以最新的安卓設計標準,實現完善的圖庫管理、高分辨率多格式圖像支持乃至圖片編輯,各家廠商ROM中內置的圖片App卻只能紛紛表示臣妾做不到啊。近幾個版本快圖更是加入了云功能,可以通過各家廠商的云服務存儲圖片,功能仍沒有落后于時代。
這次hi國內外主流云服務同步數據,功能簡直無懈可擊,1M的App如此神通廣大你怕不怕?
可以說,快圖是最具水平的超袖珍App之一。不少超袖珍的App做到了某方面的極致功能,或者功能非常極客向,固然會令部分用戶叫好;但快圖這種以微型體積做到了全方位的大眾向功能的App,實在鳳毛麟角。毫無疑問,快圖仍是這個星球上最好的安卓看圖App。
PS:剛寫完這段文字快圖就更新了一個版本,體積變成了1.01M……小編表示這一定是假的、騙人的、加了特效!Orz不管了,超1M就超1M了吧,雖然和標題不符但似乎也不是什么很重要的事情,也沒超多少是吧!
2超微型看圖利器:快捷圖庫回頂部
超微型看圖利器:快捷圖庫
軟件名稱: | 快捷圖庫(Quick Gallery) |
軟件版本: | 2.1.0 |
軟件大?。?/strong> | 877KB |
軟件授權: | 免費 |
適用平臺: | Android |
下載地址: | http://dl.pconline.com.cn/download/359784.html |
這又是一個小得難以置信的看圖App,體積僅有0.86M,也許圖片瀏覽的功能真的對體積要求不大?快捷圖庫App的設計非常先進,已經全面用上了安卓5.0的Material Design設計語言,值得一提的是快捷圖庫的圖標很像巴西國旗,也許博得球迷朋友一份額外的好感。
擁有Time line界面,查看不同時段的照片很方便
體積小歸小,快捷圖庫并沒有省掉基本功能。無論是圖庫管理還是圖片瀏覽,都不在話下。而和快圖相比,快捷圖庫多了一個“時間線(Time line)”的界面,可以在一個界面中像欣賞隨時間排列的照片瀑布流。結合快捷圖庫輕巧體積帶來的速度,“時間線”的體驗非常淋漓暢快。
功能其實比較弱,但界面還是比較好看的
不過,快捷圖庫缺乏對云服務的支持,也不能自定義圖片掃描路徑,繼承了安卓原生圖庫的腦殘設計,會把所有圖片都給你掃出來,使用上并不符合國人習慣。
快捷圖庫會一下子把所有圖片掃出來,和安卓原生圖庫一樣腦殘
總的來說,快捷圖庫雖然出色,但和快圖相比還是存在差距的。這款快捷圖庫App,也許會比較受外國用戶的歡迎吧。
3超苗條天氣播報:彩虹天氣回頂部
超苗條天氣播報:彩虹天氣
軟件名稱: | 彩虹天氣 |
軟件版本: | 4.3.08 |
軟件大小: | 467KB |
軟件授權: | 免費 |
適用平臺: | Android |
下載地址: | http://dl.pconline.com.cn/download/75657.html |
現在很難找得到干干凈凈老老實實的天氣App了,想看個天氣點開界面,什么皮膚大禮包屠龍寶刀點擊就送撲面而至,實在感人。那么天氣App去掉各種累贅,到底可以極限減肥到什么地步?彩虹天氣給出了一個驚人的答案——不到0.5M。
彩虹天氣遵循Android Design,界面簡潔,信息也足夠豐富
彩虹天氣是一款麻雀雖小五臟俱全的天氣App,體積僅有0.46M,卻實現了非常實用的天氣實況和天氣預報功能,還附帶了桌面小部件,并支持通知欄天氣查看。彩虹天氣可以顯示氣溫、濕度、風速等天氣信息,如果你只是想要普通看看天氣,完完全全夠用了。
0.46M的小軟件,帶有各色小部件,的確相當不錯
除了天氣方面的基本功外,彩虹天氣還可以對界面進行一些定制。喜歡打扮的話,你可以為彩虹天氣更換皮膚——這一切功能的前提是不到0.5M的超小體積,不得不說實在令人吃驚。
4超小巧來電顯示:QC歸屬地回頂部
超小巧來電顯示:QC歸屬地
軟件名稱: | QC歸屬地 |
軟件版本: | 0.11 |
軟件大?。?/strong> | 508KB |
軟件授權: | 免費 |
適用平臺: | Android |
下載地址: | http://dl.pconline.com.cn/download/78533.html |
來電歸屬地是一個非常簡單的功能,只要將號碼和數據庫匹配然后顯示給用戶看即可。但偏偏,很多互聯網公司就有把一塊豆腐做成滿漢全席的本事,一個來電歸屬地能給你集成酒店預定銀行保險等等千奇百怪的功能,體積自然也小不了。覺得存儲空間太奢侈?QC歸屬地能夠給你一個驚喜。
QC歸屬地界面簡簡單單,功能足以夠用
QC歸屬地是一款體積僅有0.5M的來電歸屬地查詢App,數百K的容量即實現了完整的來電歸屬地查詢功能。QC歸屬地可以顯示來電和去電的歸屬地,還能夠自定義歸屬地文字的顯示位置,并支持將號碼加入歸屬地信息。
可設置項還是比較豐富的,可以手動導入號碼數據庫
不過遺憾的是,QC歸屬地并不能聯網更新數據庫,用戶需要下載數據庫手動導入。但考慮到號碼段并不會經常更新,QC歸屬地的實用性還是杠杠的。值得一提的是,QC歸屬地的開發者和快圖的開發者是同一個人,實在是良心大大的。
5超纖細音樂寶盒:HikiPlayer回頂部
超纖細音樂寶盒:HikiPlayer
軟件名稱: | HikiPlayer播放器 |
軟件版本: | 2.0.3 |
軟件大?。?/strong> | 200KB |
軟件授權: | 免費 |
適用平臺: | Android |
下載地址: | http://dl.pconline.com.cn/download/85592.html |
隨著移動互聯網的發展,音樂播放器也走上了“云”的道路。越來越多的音樂播放器主打在線體驗和社交,體積也隨之日益增長。一款音樂播放器,如果回歸本心,只保留本地音樂播放功能,體積可以精簡到何種程度?答案非常驚人——僅有0.19M。
HikiPlayer簡約而不簡單,支持按文件夾播放
HikiPlayer就是這個僅有0.19M的超緊湊音樂播放器App。HikiPlayer界面簡約,沒有什么華麗的裝飾,但配色和布局都顯得落落大方。得益于HikiPlayer跟進了安卓5.0的Material Design設計規范,操作間還有豐富的過渡動畫,視覺效果心曠神怡。HikiPlayer能夠顯示專輯封面,支持鎖屏專輯圖片顯示和操控,看上去完全沒有簡陋的感覺,這0.2M做出來的界面可比一大票十幾M的音樂App不知道高到哪里去了。
支持鎖屏控制和通知欄控件,非常好用
支持EQ調節,還附帶了N種EQ方案
在功能方面,HikiPlayer只支持本地文件夾播放,沒有附帶媒體庫功能。如果你習慣下載歌曲并整理的習慣,用起來還是問題不大的。HikiPlayer支持多種播放模式,循環播放隨機播放都有提供,還可以調節EQ,并附帶有小部件——這0.2M的體積簡直不能再物盡其用了。
6超緊湊手勢控件:Swipe Navigation回頂部
超緊湊手勢控件:Swipe Navigation
軟件名稱: | 滑動導航(Swipe Navigation) |
軟件版本: | 3.0.0 |
軟件大?。?/strong> | 972KB |
軟件授權: | 免費 |
適用平臺: | Android |
下載地址: | http://dl.pconline.com.cn/download/359785.html |
現在很多移動OS都引入了大量手勢操作,比如說iOS可以利用滑動手勢實現后退、返回桌面等功能,Ubuntu Mobile更是完全脫離了按鈕,用手勢解決一切。安卓在手勢利用方面顯得沒有這么激進,那么要抹平手勢利用方面的差距,安卓需要增加多少東西?0.95M的Swipe Navigation就足以勝任。
Swipe Navigation界面,雖然比較簡陋,但功能擺在那
Swipe Navigation是一款體積非常緊湊的安卓手勢App,不足1M的身軀卻蘊藏了巨大的能量。Swipe Navigation提供了多種手勢可選,用戶可以自定義手勢和系統功能一一對應。通過Swipe Navigation,可以設定在屏幕不同的地方滑動,從而實現不同的功能,用戶還能夠微調手勢的滑動長度、靈敏度等參數,使之更符合自己的使用習慣。
手勢對應的功能可以自定義,還支持Dock快速調取App
此外,Swipe Navigation還提供了Dock功能,用戶可以將常用的功能放置到Dock邊欄上,需要的時候通過手勢呼出Dock即可。安卓平臺上的手勢App并不少,普遍體積也都不大。就算是功能最強大的GMD,體積也就2M不到。如果你不介意體積大那么一點點,功能更多的GMD也非常值得體驗。
總結
曾幾何時,手機應用幾乎全都是數以KB計的羽量級軟件,但隨著移動平臺的飛速發展,手機App在資源占用上甚至已經可以和PC軟件一爭長短。不過,小而美的存在總是有的,希望大家能夠通過上文的App享受到高效代碼的魅力吧!
【推薦】用PConline官方客戶端下載
avaScript在現在的網頁設計中用得很多,Android 的WebView可以載入網頁,WebView也設計了與JavaScript通信的橋梁。這篇主要介紹一下WebViewk控件如何和JavaScript進行交互。
WebView:
WebView和網頁相關的主要有一下幾個方法:
setWebViewClient;
setWebChromeClient;
addJavascriptInterface;
loadUrl;
setWebViewClient:設置一個WebViewClient的對象,通過這個對象的幾個回調方法,可以知道當前網頁的狀態。
setWebViewChromeClient: 設置一個WebChromeClient對象,JavaScript調用的一些內建方法都是通過這個對象來處理的。
addJavascriptInterface: 設置JavaScript的接口,有兩個參數,第一個一般是一個Object對象,里面實現的方法都是網頁里JavaScript可以調用到的,第二個參數是一個字符串,最后到JavaScript就相當于一個對象名,JavaScript通過這個對象名調用第一個參數里面實現的方法。要使這個方法生效,要通過WebView的getSettings方法獲取WebSettings對象,設置JavaScript使能 setJavaScriptEnabled(true)。
loadUrl:載入相應網頁。
下面實現了一個簡單的Demo(最后有效果圖): 主要的流程是載入了asset目錄下的一個內置網頁,點擊網頁上的Click按鈕,會調用通過addJavascriptInterface方法設置下去的Object的show方法,這個方法里通過loadUrl的方式調用JavaScript的javaScriptshow方法,這個方法里又調用了Java的result方法,result方法里顯示了一個Toast.需要注意的是show方法的回調和result方法的回調是不在主線程的。
MainActivity.java
1 package com.example.administrator.webviewl; 2 3 import android.graphics.Bitmap; 4 import android.os.Handler; 5 import android.support.v7.app.AppCompatActivity; 6 import android.os.Bundle; 7 import android.util.Log; 8 import android.webkit.JavascriptInterface; 9 import android.webkit.JsResult; 10 import android.webkit.WebChromeClient; 11 import android.webkit.WebResourceError; 12 import android.webkit.WebResourceRequest; 13 import android.webkit.WebView; 14 import android.webkit.WebViewClient; 15 import android.widget.Toast; 16 17 public class MainActivity extends AppCompatActivity { 18 19 private static final String TAG = "MainActivity.TAG"; 20 WebView mWebView; 21 Handler mHander = new Handler; 22 @Override 23 protected void onCreate(Bundle savedInstanceState) { 24 super.onCreate(savedInstanceState); 25 setContentView(R.layout.activity_main); 26 mWebView = (WebView)findViewById(R.id.mWebView); 27 initWebView; 28 } 29 30 public void initWebView { 31 mWebView.getSettings.setJavaScriptEnabled(true); 32 mWebView.setWebViewClient(new WebViewClientCustom); 33 mWebView.addJavascriptInterface(new Object { 34 @JavascriptInterface 35 public void result(final String result) { 36 Log.d(TAG,"javaScript 調用java的方法 返回結果 result = " + result); 37 mHander.post(new Runnable { 38 @Override 39 public void run { 40 if (result.length > 0) Toast.makeText(MainActivity.this,"你輸入了: " + result,Toast.LENGTH_SHORT).show; 41 } 42 }); 43 } 44 @JavascriptInterface 45 public void show { 46 Log.d(TAG,"JavaScript 調用java show"); 47 mHander.post(new Runnable { 48 @Override 49 public void run { 50 Log.d(TAG,"java 調用 javaScript javaScriptshow"); 51 mWebView.loadUrl("JavaScript:javaScriptshow"); 52 } 53 }); 54 return; 55 } 56 },"JavaScriptL"); 57 mWebView.loadUrl("file:///android_asset/index.html"); 58 } 59 60 public class WebViewClientCustom extends WebViewClient { 61 @Override 62 public void onPageStarted(WebView view, String url, Bitmap favicon) { 63 Log.d(TAG,"onPageStarted"); 64 super.onPageStarted(view, url, favicon); 65 } 66 67 @Override 68 public void onPageFinished(WebView view, String url) { 69 Log.d(TAG,"onPageFinished"); 70 super.onPageFinished(view, url); 71 } 72 73 @Override 74 public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 75 Log.d(TAG,"onReceivedError"); 76 super.onReceivedError(view, request, error); 77 } 78 } 79 }
View Code
index.html 內置的網頁
1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="Generator" content="EditPlus?"> 6 <meta name="Author" content=""> 7 <meta name="Keywords" content=""> 8 <meta name="Description" content=""> 9 <title>javaScript</title> 10 <script type="text/javaScript"> 11 function javaScriptshow { 12 var a = document.getElementById("text").value; 13 JavaScriptL.result(a); 14 } 15 </script> 16 </head> 17 <body style="text-align:center;margin-top:100px"> 18 <p > Android javaScript學習</p> 19 <form action=""> 20 <input type="text" id = "text" value=""/> 21 <input type="button" onclick="window.JavaScriptL.show" value="Click" /> 22 </form> 23 </body> 24 </html>
實現的效果圖如下:
*請認真填寫需求信息,我們會在24小時內與您取得聯系。