NetworkStateView(1)——具备网络状态监听并自动切换的View
来源:互联网 发布:高见泽俊彦 知乎 编辑:程序博客网 时间:2024/06/07 08:30
What?
本库是基于该项目进行的二次封装:
https://github.com/AlarmZeng/NetworkStateView
这个库是集成了如下功能:
- 保留基本库原有的使用方式(对应不同网络状态的布局【参考】)
- 网络判断工具类
- 网络状态变化的广播
- 对应封装的逻辑基类
- 包装类:NetLinearWrapContainer
Why?
为何要封装?
- 1.主要是工作中用到了多种网络状态切换,然后同事一看对我说,“你这用着不爽,每个类都要去include一下。不开心”。
- 2.将网络监测相关代码汇总到NetObserverActivity,NetObserverAppCompatActivity,NetObserverFragment,详见Demo。
Target!
我们的目标是!没有蛀牙! 让网络状态View逻辑上变得简单。
也就是说要实现这样的效果时,我们只需要做如下操作:
- BaseActivity/BaseFragment extentds NetObserverActivity/NetObserverFragment
- BaseActivity/BaseFragment 内编写如下代码:
super.initNetState(rootView);//rootView是页面根布局
- BaseActivity/BaseFragment 内编写如下代码:
- 页面根布局定义为:
<com.netstatus.NetLinearWrapContainer xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/transparent" android:orientation="vertical" tools:context="com.sound.haolei.operate.ui.fragment.HomeFragment">
关注的这3个点,便可以轻松的使用这个库。(其实本人还想再将这3个点省去,但是奈何水平有限,还是会产生一定的侵入代码)
Dependencies!
- Step 1. Add it in your root build.gradle at the end of repositories:
allprojects { repositories { ... maven { url 'https://www.jitpack.io' } } }
- Step 2. Add the dependency:
dependencies { compile 'com.github.zj614android:netstateview:1.0.0'}
若想修改源码时,可以:
compile project(':netstateview')
How?
基础使用方式:
参考原项目
xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="demo.netstate.com.netstatedemo.LittleActivity"> <include layout="@layout/view_network_state" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:text="突突突~突突~" android:textSize="30sp" /></LinearLayout>
java代码
package demo.netstate.com.netstatedemo;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.netstatus.NetworkStateView;public class LittleActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_little); com.netstatus.NetworkStateView nv = (NetworkStateView) findViewById(R.id.nsv_state_view); nv.showLoading(); }}
NetLinearWrapContainer包装类的使用:
基本:
xml
<?xml version="1.0" encoding="utf-8"?><com.netstatus.NetLinearWrapContainer xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:text="突突突~突突~" android:textSize="30sp" /></com.netstatus.NetLinearWrapContainer>
java代码
package demo.netstate.com.netstatedemo;import android.os.Bundle;import demo.netstate.com.netstatedemo.base.BaseAppCompatActivity;public class CommonActivity extends BaseAppCompatActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_common); }}
NetLinearWrapContainer & extends BaseAppCompatActivit做了这些事:
- 自动往根布局里添加状态视图,注意目前只支持vertical的NetLinearWrapContainer
- 自动注册网络监测
- 根据网络状态变化自动切换视图
- 支持自定义属性,是否拥有titleBar
这只是普通activity内的,还有fragment和带有actionbar的activity的使用方式。详细见demo
一个自定义属性:
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="NetLinearWrapContainer"> <attr name="haveActionBar" format="boolean" /> </declare-styleable></resources>
这个属性的作用是啥呢?当界面内需要用网络视图布局覆盖的组件有ActionBar的时候,那么这时候你就应该设置这个属性为true那么这个Ui会自动添加到布局元素的index2,布局的index机制请自行百度。
app:haveActionBar=”true”
<?xml version="1.0" encoding="utf-8"?><com.netstatus.NetLinearWrapContainer xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" app:haveActionBar="true" android:orientation="vertical"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:text="突突突~突突~" android:textSize="30sp" /></com.netstatus.NetLinearWrapContainer>
局限性:
根布局用这个组件进行布局的时候,由于他是一个LinearLayout,且只支持vertical。
三个包装类:
NetObserverActivity.java
NetObserverAppCompatActivity.java
NetObserverFragment.java
这三个类是封装类,里边做了网络状态相关的初始化,具体怎么集成,可以看Demo内的Base基类是如何封装的。
点击按钮”重新加载”的点击事件设置:
可选的 Override 3个回调(你不想用可以不写):
public interface OnRefreshListener { /** * 空的刷新按钮 */ void netWorkStatusEmptyRefresh(); /** * 网络错误刷新按钮 */ void netWorkStatusErrorRefresh(); /** * 没有网络刷新按钮 */ void netWorkStatusNoNetWorkRefresh(); }
状态切换:
$NetObserverAppCompatActivity.java
/** * NetStatus相关 */ protected void showEmpty(){ if(null != mNetworkStateView){ mNetworkStateView.showEmpty(); }else { Log.e("NetState","mNetworkStateView为空"); } } /** * NetStatus相关 */ protected void showSuccess(){ if(null != mNetworkStateView){ mNetworkStateView.showSuccess(); }else { Log.e("NetState","mNetworkStateView为空"); } } /** * NetStatus相关 */ protected void showNoNet(){ if(null != mNetworkStateView){ mNetworkStateView.showNoNetwork(); }else { Log.e("NetState","mNetworkStateView为空"); } } /** * NetStatus相关 */ protected void showError(){ if(null != mNetworkStateView){ mNetworkStateView.showError(); }else { Log.e("NetState","mNetworkStateView为空"); } }
详见Demo
Demo
GitHub项目地址
结合网络请求使用的Demo
基本接入使用的Demo
最后,后面我会补上实现细节,并发一个帖子,有错误的地方请直接指出,我会修正改进,感谢。
- NetworkStateView(1)——具备网络状态监听并自动切换的View
- App统一监听网络状态切换
- 监听view 的滚动状态
- Android开发——监听Android手机的网络状态
- 监听电话状态并自动接听来电
- 项目中使用监听网络的广播,没网提示view显示,有网提示view隐藏,在网络状态切换时,在布局下方出现空白条的问题。
- Android实时监听网络状态(1)
- 监听网络状态的改变
- Android的网络状态监听
- AFNetworking的网络状态监听
- Android网络状态的监听
- 简单的网络状态监听
- 监听网络状态的改变
- NetworkStateView:界面多状态加载
- NetworkStateView:界面多状态加载
- NetworkStateView:界面多状态加载
- 注册广播,监听网络状态的改变,时间戳,自动获取系统时间
- android 2.1 监听电话状态并自动接听来电
- 【我的javaEE学习】前端例子之广告展示与隐藏和左右选择
- 5004: 开锁魔法II 概率DP
- VTK:读取raw文件进行面绘制
- Comparable和Comparator接口比较
- __sched的含义和出处
- NetworkStateView(1)——具备网络状态监听并自动切换的View
- RANSAC 加Guass-newton拟合曲线
- 外观模式
- Hibernate 核心技术(一)
- Visual Studio 2017 Boost配置
- GetVersionEx()获取系统的版本
- Android Studio提高效率常用插件整理
- 适配器模式
- linux源码安装mysql5.7