新版的项目需要添加一个功能,没网络的时候提示用户,有网络的时候提示内容自动消失,由于项目做了一年多,布局文件较多,如果给没给页面添加控件,比较麻烦,而且后期要是有变动,需要改的东西较多,所有决定在基类中添加显示,上代码 :
基类:
package com.shuchang.yingyong.test.networkshow;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
public abstract class BaseActvityextends AppCompatActivity {
private TextViewtipsView;
private IntentFilterintentFilter;
private NetworkChangeReceivernetworkChangeReceiver;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(getLayoutID());
}
/**
* @return 布局文件id
*/
protected abstract int getLayoutID();
@Override
protected void onResume() {
super.onResume();
showNetView();
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(networkChangeReceiver);
}
/**
* 显示网络异常时候的提示
*/
private void showNetView() {
intentFilter =new IntentFilter();
intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
networkChangeReceiver =new NetworkChangeReceiver(new NetworkChangeReceiver.INetWorkChangeListener() {
@Override
public void changeState(Boolean isAvailable) {
if(tipsView!=null){
if (isAvailable) {
tipsView.setVisibility(View.GONE);
}else {
tipsView.setVisibility(View.VISIBLE);
}
}
}
});
registerReceiver(networkChangeReceiver,intentFilter);
tipsView =new TextView(this);
tipsView.setText("网络没有链接");
View decorView = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content);
ViewGroup headView = decorView.findViewById(R.id.rl_title_all);
if (headView !=null) {
if (headViewinstanceof RelativeLayout) {
View one = headView.findViewById(R.id.headone);
RelativeLayout.LayoutParams params =new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
params.addRule(RelativeLayout.BELOW, one.getId());
tipsView.setLayoutParams(params);
headView.addView(tipsView);
}else if (headViewinstanceof LinearLayout) {
}
}
}
}
网络监听:
package com.shuchang.yingyong.test.networkshow;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class NetworkChangeReceiverextends BroadcastReceiver {
// 网络变化回调
INetWorkChangeListenermChangeListener;
private NetworkChangeReceiver(){
}
public NetworkChangeReceiver(INetWorkChangeListener changeListener){
mChangeListener=changeListener;
}
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
if (mChangeListener !=null) {
if (networkInfo !=null && networkInfo.isAvailable()) {
mChangeListener.changeState(true);
}else {
mChangeListener.changeState(false);
}
}
}
public interface INetWorkChangeListener{
public void changeState(Boolean isAvailable);
}
}
测试类1:
package com.shuchang.yingyong.test.networkshow;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class MainActivityextends BaseActvity {
private TextViewhellword;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
hellword = findViewById(R.id.hellword);
hellword.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this,NextActivity.class));
}
});
}
@Override
protected int getLayoutID() {
return R.layout.activity_main;
}
}
测试类2:
package com.shuchang.yingyong.test.networkshow;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class NextActivityextends BaseActvity {
private TextViewhellword;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
hellword = findViewById(R.id.hellword);
hellword.setText("这是 第二个界面");
}
@Override
protected int getLayoutID() {
return R.layout.activity_main;
}
}
布局文件 activity_main.xml :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
tools:context=".MainActivity">
<include layout="@layout/layout_title"></include>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/hellword"/>
</LinearLayout>
布局文件 layout_title.xml :
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/rl_title_all"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@color/color_8"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:id="@+id/headone"
>
<RelativeLayout
android:id="@+id/rl_title_left"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:clickable="true"
>
<ImageView
android:id="@+id/tv_activity_base_left"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_centerVertical="true"
android:visibility="gone"
android:src="@mipmap/title_return_arow"
/>
<TextView
android:id="@+id/tv_return_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/tv_activity_base_left"
android:textSize="14sp"
android:layout_centerVertical="true"
android:text="返回"
android:paddingRight="10dp"
android:visibility="gone"
android:textColor="@color/deep_6"
/>
</RelativeLayout>
<TextView
android:id="@+id/tv_activity_base_title"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:singleLine="true"
android:ellipsize="end"
android:layout_centerInParent="true"
android:gravity="center"
android:maxLength="15"
android:drawablePadding="4dp"
android:textColor="@color/white"
android:text="测试网络连接"
android:textSize="16sp" />
<RelativeLayout
android:id="@+id/rl_title_right"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:clickable="true">
<TextView
android:id="@+id/tv_activity_base_right"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="15sp"
android:text=""
android:textColor="@color/white"
android:layout_centerVertical="true"
android:paddingLeft="16dp"
android:paddingRight="16dp"
/>
<TextView
android:id="@+id/tv_activity_base_right2"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toRightOf="@+id/tv_activity_base_right"
android:gravity="center"
android:paddingRight="15dp"
android:text=""
android:textSize="15sp"
android:textColor="@color/white"
android:visibility="gone" />
<ImageView
android:id="@+id/iv_return_to_home"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:src="@mipmap/home_logos"
android:paddingLeft="15dp"
android:paddingRight="15dp"
android:visibility="gone"
/>
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
清单文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.shuchang.yingyong.test.networkshow">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".NextActivity">
</activity>
</application>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
</manifest>
效果图:
完整的项目下载地址:https://download.csdn.net/download/wangyufengdy/10787432
网友评论