篇文章我看过觉得特别有感悟,现在推荐给大家,我在这篇文章中学习到很多,希望看完大家也能有所提升。
作者:依然范特稀西
链接: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,相信没有什么人会反对。快图自诞生以来就是安卓不可或缺的装机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 |
软件大小: | 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 |
软件大小: | 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 |
软件大小: | 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 |
软件大小: | 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小时内与您取得联系。