前言

最近项目中需要实现一个展示天气信息的功能,就去搜索相关的天气API接口,拿到接口后本地进行解析展示即可。在搜索的过程中,发现了一个很好用的天气插件,无需自己请求天气API以及布局天气信息UI,真是省时、省力,更重要的是,还是免费的!免费的!免费的!(开心o( ̄▽ ̄)ブ)那么接下来我们就开始认识一下这个插件吧!

一、介绍

和风天气开发平台 https://dev.qweather.com/

这个平台提供了移动端的天气数据SDK、Web端的天气数据Web
API以及免费的天气插件,可以在任意网站、APP中使用,几乎不需要开发。我们今天就来试试Android上天气插件的使用。

二、准备工作

1、生成密钥key和下载jar包。

2、工程配置

(1)将jar包添加到项目的libs目录下,右击jar包选择Add as library。


(2)项目的AndroidManifeist.xml文件中添加权限
注意:如果添加了位置相关的权限,Android6.0以上仍然需要动态申请该位置权限。

 <!--允许网络连接,必选--><uses-permission android:name="android.permission.INTERNET"/><!--访问设备状态,必选--><uses-permission android:name="android.permission.READ_PHONE_STATE"/><!--访问网络定位(可选),如果使用系统定位,该权限为必选--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/><!--访问GPS定位(可选),如果使用系统定位,该权限为必选--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><!--悬浮窗权限(可选),如果使用悬浮窗功能,该权限为必选--><uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/><!--访问WiFi状态,可选--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

(3)项目级别的build.gradle文件中,引用相关库。

 //引用库implementation 'com.squareup.okhttp3:okhttp:3.9.0'implementation 'com.google.code.gson:gson:2.6.2'

(4)如果要开启混淆,则还需要在混淆文件proguard-rules.pro中添加以下规则

#排除OKHTTP
-dontwarn com.squareup.**
-dontwarn okio.**
-keep public class org.codehaus.* { *; }
-keep public class java.nio.* { *; }#排除sdk
-keep public class com.qweather.plugin.bean.** { *; }
-keep public class com.qweather.plugin.view.** { *; }

说明:我在创建工程的时候,使用的是Android Studio4.2.1版本,工程创建成功后,gradle.properties中只有如图中的两行,这导致我在调用插件代码的运行APP时候,会报找不到如下图“Caused by: java.lang.ClassNotFoundException: Didn’t find class “android.support.v4.app.ActivityCompat” on path:…”的错误。


后面一顿操作,发现需要在gradle.properties文件中添加下面一句话就不会报错了,看这个注释的意思大概就是“自动将第三方库转换以使用AndroidX”,至此终于可以安心使用插件了。

三、SDK使用

1、初始化

 /** 初始化* @param key   用户的KEY  (密钥key)* @param location  城市信息,若不传或为空则调用Android源生定位** 上述location属性,如不传递location,则采用android原生定位,* 需开启android.permission.ACCESSCOARSELOCATION 和*  android.permission.ACCESSFINELOCATION权限*/QWeatherConfig.init("key","location");QWeatherConfig.init("key");

2、布局及显示

 天气插件布局一共有4种,分别为横向布局、左1右2横向布局、右1左2横向布局,以及纵向布局。
(1)横向布局
<com.qweather.plugin.view.HorizonViewandroid:id="@+id/horizon_view"android:layout_width="match_parent"android:layout_height="60dp" />
     QWeatherConfig.init("密钥key");HorizonView horizonView = findViewById(R.id.horizon_View);//设置控件显示默认的背景图片llView.setDefaultBack(true);//添加地址文字描述,第一个参数为文字大小,单位:sp ,第二个参数为文字颜色,默认白色horizonView.addLocation(14, Color.WHITE);//添加预警图标,参数为图标大小,单位:dphorizonView.addAlarmIcon(14);//添加预警文字horizonView.addAlarmTxt(14);//添加温度描述horizonView.addTemp(14, Color.WHITE);//添加天气图标horizonView.addWeatherIcon(14);//添加天气描述horizonView.addCond(14, Color.WHITE);//添加风向图标horizonView.addWindIcon(14);//添加风力描述horizonView.addWind(14, Color.WHITE);//添加文字:AQIhorizonView.addAqiText(14, Color.WHITE);//添加空气质量描述horizonView.addAqiQlty(14);//添加空气质量数值描述horizonView.addAqiNum(14);//添加降雨图标horizonView.addRainIcon(14);//添加降雨描述horizonView.addRainDetail(14, Color.WHITE);//设置控件的对齐方式,默认居中horizonView.setViewGravity(HeContent.GRAVITY_CENTER);//设置控件的内边距,默认为0horizonView.setViewPadding(10, 10, 10, 10);//显示控件horizonView.show();

(2)左1右2横向布局
<com.qweather.plugin.view.LeftLargeViewandroid:id="@+id/ll_view"android:layout_width="match_parent"android:layout_height="60dp"/>
     QWeatherConfig.init("密钥key");LeftLargeView llView = findViewById(R.id.ll_view);//获取左侧大布局LinearLayout leftLayout = llView.getLeftLayout();//获取右上布局LinearLayout rightTopLayout = llView.getRightTopLayout();//获取右下布局LinearLayout rightBottomLayout = llView.getRightBottomLayout();//设置控件显示默认的背景图片llView.setDefaultBack(true);//添加温度描述到左侧大布局//第一个参数为需要加入的布局//第二个参数为文字大小,单位:sp//第三个参数为文字颜色,默认白色llView.addTemp(leftLayout, 40, Color.WHITE);//添加温度图标到右上布局,第二个参数为图标宽高(宽高1:1,单位:dp)llView.addWeatherIcon(rightTopLayout, 14);//添加天气描述到右上布局llView.addCond(rightTopLayout, 14, Color.WHITE);//添加预警图标到右上布局llView.addAlarmIcon(rightTopLayout, 14);//添加预警描述到右上布局llView.addAlarmTxt(rightTopLayout, 14);//添加文字AQI到右上布局llView.addAqiText(rightTopLayout, 14);//添加空气质量到右上布局llView.addAqiQlty(rightTopLayout, 14);//添加空气质量数值到右上布局llView.addAqiNum(rightTopLayout, 14);//添加地址信息到右上布局llView.addLocation(rightTopLayout, 14, Color.WHITE);//添加风向图标到右下布局llView.addWindIcon(rightBottomLayout, 14);//添加风力描述到右下布局llView.addWind(rightBottomLayout, 14, Color.WHITE);//添加降雨图标到右下布局llView.addRainIcon(rightBottomLayout, 14);//添加降雨描述到右下布局llView.addRainDetail(rightBottomLayout, 14, Color.WHITE);//设置控件的对齐方式,默认居中llView.setViewGravity(HeContent.GRAVITY_LEFT);//显示布局llView.show();

(3)右1左2横向布局
<com.qweather.plugin.view.RightLargeViewandroid:id="@+id/rl_view"android:layout_width="match_parent"android:layout_height="60dp"/>
     QWeatherConfig.init("密钥key");RightLargeView rlView = findViewById(R.id.rl_view);//获取右侧大布局LinearLayout rightLayout = rlView.getRightLayout();//获取左上布局LinearLayout leftTopLayout = rlView.getLeftTopLayout();//获取左下布局LinearLayout leftBottomLayout = rlView.getLeftBottomLayout();//取消默认背景rlView.setDefaultBack(false);//设置布局的背景圆角角度,颜色,边框宽度边框颜色rlView.setStroke(0, Color.GRAY, 1,  Color.WHITE);//添加地址文字描述到左上布局// 第一个参数为需要加入的布局,// 第二个参数文字大小,单位:sp ,// 第三个参数为文字颜色,默认白色rlView.addLocation(leftTopLayout, 14, Color.WHITE);//添加文字:AQIrlView.addAqiText(leftTopLayout, 14);//添加空气质量描述rlView.addAqiQlty(leftTopLayout, 14);//添加空气质量数值描述rlView.addAqiNum(leftTopLayout, 14);//添加预警图标,参数为图标大小,单位:dprlView.addAlarmIcon(leftTopLayout, 14);//添加预警文字rlView.addAlarmTxt(leftTopLayout, 14);//添加天气图标rlView.addWeatherIcon(leftTopLayout, 14);//添加到左下布局//添加降雨图标rlView.addRainIcon(leftBottomLayout, 14);//添加降雨描述rlView.addRainDetail(leftBottomLayout, 14, Color.WHITE);//添加风向图标rlView.addWindIcon(leftBottomLayout, 14);//添加风力描述rlView.addWind(leftBottomLayout, 14, Color.WHITE);//添加天气描述rlView.addCond(leftBottomLayout, 14, Color.WHITE);//添加温度描述rlView.addTemp(rightLayout, 40, Color.WHITE);//设置控件的对齐方式,默认居中rlView.setViewGravity(HeContent.GRAVITY_RIGHT);rlView.show();

(4)纵向布局
<com.qweather.plugin.view.VerticalViewandroid:id="@+id/vertical_view"android:layout_width="75dp"android:layout_height="match_parent"/>``````cQWeatherConfig.init("密钥key");VerticalView verticalView = findViewById(R.id.vertical_view);//默认布局背景verticalView.setDefaultBack(true);verticalView.addLocation(14, Color.WHITE);verticalView.addTemp(14, Color.WHITE);verticalView.addWeatherIcon(14);verticalView.addCond(14, Color.WHITE);verticalView.addWindIcon(14);verticalView.addWind(14, Color.WHITE);verticalView.addAqiText(14, Color.WHITE);verticalView.addAqiQlty(14);verticalView.addAqiNum(14);verticalView.addAlarmIcon(14);verticalView.addAlarmTxt(14);verticalView.addRainIcon(14);verticalView.addRainDetail(14, Color.WHITE);verticalView.show();

3、高级设置

(1)设置背景颜色

控件默认背景是根据天气变化展示不同的背景图片

上面“右1左2横向布局”就是自定义的背景,如下面部分代码

         //取消默认背景rlView.setDefaultBack(false);//设置布局的背景圆角角度,颜色,边框宽度边框颜色rlView.setStroke(0, Color.GRAY, 1,  Color.WHITE);
(2)链接到H5

如需点击控件跳转到天气详情H5界面需要在AndroidManifest.xml配置如下代码:

<activity
android:name="com.qweather.plugin.view.SdkWebViewActivity" />

这里有个问题需要注意下,如果不想链接到H5界面,因为控件内部已经绑定了点击事件,此时如果不小心点击到控件,程序就会闪退。

(3)使用天气悬浮控件
     QWeatherConfig.init("密钥key");//初始化悬浮控件SuspendView suspendView = new SuspendView(this);//显示悬浮控件suspendView.show();

(4)替换天气图标

1、在文件目录app/src/main下创建资源文件夹assets
2、在app/src/main/assets文件夹放入文件名对应天气代码的图标,文件名:白天是天气代码+d,晚上是天气代码+n后缀为.png,例如:100d.png,100n.png,请参考天气图标
3、在初始化的时候调用下列方法

     //替换天气图标为本地图标QWeatherConfig.changeWeatherIcon();

Android小插件 —— 天气插件相关推荐

  1. android 系统天气插件,天气插件平台-天气预报插件-免费天气预报代码—中国天气网...

    适配版本 Android 4.0及以上 1.工程配置 将Plugin_SDK_Android_v2.0.jar导入到工程中,并且引用 配置Android Manifest权限 权限列表 权限说明 代码 ...

  2. android 显示天气插件下载,Android天气插件

    Android天气插件 天气插件Android SDK,包括实况天气.空气质量.灾害预警.生活指数等天气内容,支持在Android应用任意位置加入天气内容,并可生成天气频道页面. 下载 # 适配版本 ...

  3. android 小插件下载地址,万能小组件小部件

    万能小组件小部件,优质的手机桌面美化工具,您可以自由编辑组件内容,例如时钟.日历.相册.背景.天气等等,还可以快速设置锁屏壁纸,打造专属于自己的个性桌面,简单又好用!非常炫酷哦! 万能小组件小部件介绍 ...

  4. 心知天气Android开发,H5 实现天气效果(心知天气插件)

    H5 实现天气效果(心知天气插件) H5 实现天气效果(心知天气插件) 先上效果图 鼠标移上去的效果展示 核心代码如下: (function(a,h,g,f,e,d,c,b){b=function() ...

  5. 如何在 Linux 中使用类似智能手机外观的 Conky 天气插件

    如何在 Linux 中使用类似智能手机外观的 Conky 天气插件 智能手机都拥有一些平滑地融入手机外观的天气小插件,现在幸亏有了 Flair Weather Conky,你便可以在你的 Linux ...

  6. XM7 FOR ANDROID,如何使用Android Studio开发Gradle插件

    缘由 首先说明一下为什么会有这篇文章.前段时间,插件化以及热修复的技术很热,Nuwa热修复的工具NuwaGradle,携程动态加载技术DynamicAPK,还有希望做最轻巧的插件化框架的Small.这 ...

  7. Android studio 常用的插件

    Android studio 常用的插件 Exynap Effortless Android Development [官网地址]( http://exynap.com/) ![Effortless ...

  8. Halo博客网站添加天气插件

    一.前言 小编最近使用Halo搭建了一个个人博客网站,样子很是精美,直接下载主题即用,用过Halo的都说好.最近看别的博主网站下面有天气预报,今天小编百度了一会,觉得2345天气插件比较符合小编的审美 ...

  9. android切环境插件,Android Studio 2.0 - 插件太旧,请更新到更新版本,或设置ANDROID_DAILY_OVERRIDE环境变量...

    Android Studio 2.0 - 插件太旧,请更新到更新版本,或设置ANDROID_DAILY_OVERRIDE环境变量 我更新了Android Studio 2.0版并正常使用. 当我今天创 ...

  10. Android热修复及插件化原理

    1.前言 热修复一直是这几年来很热门的话题,主流方案大致有两种,一种是微信Tinker的dex文件替换,另一种是阿里的Native层的方法替换.这里重点介绍Tinker的大致原理. 2.类加载机制 介 ...

最新文章

  1. Ubuntu 13.04 安装 OpenCV 及试用
  2. python怎么样才算入门编程-新手如何入门Python编程
  3. 算法与面试之-如何准备算法面试
  4. Java多线程--使用future进行异步编程
  5. angular_ui-router ——依赖注入
  6. 06- 本地方法接口
  7. JAVA多线程(一)线程安全问题产生的原因
  8. 复制书稿(信息学奥赛一本通-T1278)
  9. 【mysql系列】细谈explain执行计划之“谜”
  10. PHP判断用户是否登录
  11. php中绘制图像的手册,推荐功能超级强大的PHP画图库JpGraph
  12. 前端工程精粹(二):静态资源管理与模板框架
  13. TCP/UDP调试工具
  14. 计算机磁盘管理只有C盘怎么办,新电脑只有C盘怎么办?手把手教你给硬盘分区!...
  15. 【Python】实现B站MP4格式音频与视频合并,ffmpeg一个命令即可
  16. html怎么插入 ppt课件,PPT课件怎么插入声音?
  17. Nahimic应用程序初始化失败
  18. ValueError: tile cannot extend outside image
  19. IDA反汇编/反编译静态分析iOS模拟器程序(六)交叉引用
  20. 那些黑科技感爆棚的可视化大屏,是怎么做出来的?模板直接套用

热门文章

  1. C# 控制台应用程序
  2. 一次让你搞懂Android应用签名
  3. 极通Aipcconn已停止工作问题处理方法
  4. 废粉盒在哪里_复印机提示“废粉盒满”“请及时更换废粉盒”
  5. 手机上计算机开n次方,手机计算器还能这样用,99%的人都不知道
  6. MATLAB热障涂层成像,微波检测热障涂层孔隙率的可行性研究
  7. 【代码质量】C/C++代码静态分析与常用分析软件工具
  8. python123平台第三周作业答案_python123第一周作业
  9. 华硕笔记本禁用触控板方法
  10. 支持超过4000字节的varchar2类型