diff --git a/README.md b/README.md index ed97c7b..814a9a2 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@

API Library version - - + + License

@@ -13,7 +13,7 @@ - 网络异常视图 - 内容视图 -[apk下载](https://github.com/qyxxjd/MultipleStatusView/blob/master/apk/MultipleStatusView.apk?raw=true) +[apk下载](https://github.com/qyxxjd/MultipleStatusView/blob/master/apk/MultipleStatusView_1.7_9.apk?raw=true) ![](https://github.com/qyxxjd/MultipleStatusView/blob/master/screenshots/demo.gif) @@ -21,7 +21,7 @@ ```gradle dependencies { - implementation 'com.classic.common:multiple-status-view:1.6' + implementation 'com.classic.common:multiple-status-view:1.7' } ``` @@ -44,21 +44,29 @@ MultipleStatusView multipleStatusView = (MultipleStatusView) findViewById(R.id.m //显示加载中视图 multipleStatusView.showLoading(); +// mMultipleStatusView.showLoading("自定义提示内容"); +// mMultipleStatusView.showLoading(R.string.custom_hint_content, "占位符1", "占位符2", "..."); // multipleStatusView.showLoading(R.layout.xxx, layoutParams); // multipleStatusView.showLoading(customView, layoutParams); //显示空视图 multipleStatusView.showEmpty(); +// mMultipleStatusView.showEmpty("自定义提示内容"); +// mMultipleStatusView.showEmpty(R.string.custom_hint_content, "占位符1", "占位符2", "..."); // multipleStatusView.showEmpty(R.layout.xxx, layoutParams); // multipleStatusView.showEmpty(customView, layoutParams); //显示错误视图 multipleStatusView.showError(); +// mMultipleStatusView.showError("自定义提示内容"); +// mMultipleStatusView.showError(R.string.custom_hint_content, "占位符1", "占位符2", "..."); // multipleStatusView.showError(R.layout.xxx, layoutParams); // multipleStatusView.showError(customView, layoutParams); //显示无网络视图 multipleStatusView.showNoNetwork(); +// mMultipleStatusView.showNoNetwork("自定义提示内容"); +// mMultipleStatusView.showNoNetwork(R.string.custom_hint_content, "占位符1", "占位符2", "..."); // multipleStatusView.showNoNetwork(R.layout.xxx, layoutParams); // multipleStatusView.showNoNetwork(customView, layoutParams); @@ -138,6 +146,7 @@ app:noNetworkView="@layout/..." - 空视图的id必须为:`empty_view` - 错误视图的id必须为:`error_view` - 无网络视图的id必须为:`no_network_view` +- 自定义提示文本的id必须为:`status_hint_content` #### 2. 如果需要点击某个 `view` 进行重试, 需要设置: @@ -168,6 +177,7 @@ tv.setText(text); 感谢以下人员贡献的代码 - [Lindroy](https://github.com/Lindroy) +- [GaoXiaoHui](https://github.com/gao746700783) ## 关于 diff --git a/apk/MultipleStatusView.apk b/apk/MultipleStatusView.apk deleted file mode 100644 index 104ed2b..0000000 Binary files a/apk/MultipleStatusView.apk and /dev/null differ diff --git a/apk/MultipleStatusView_1.7_9.apk b/apk/MultipleStatusView_1.7_9.apk new file mode 100644 index 0000000..5c00f9a Binary files /dev/null and b/apk/MultipleStatusView_1.7_9.apk differ diff --git a/app/build.gradle b/app/build.gradle index aba47f7..fb0f12a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -19,9 +19,19 @@ android { } } +android.applicationVariants.all { variant -> + variant.outputs.all { + outputFileName = new StringBuilder().append("MultipleStatusView") + .append("_").append(variant.versionName) + .append("_").append(variant.versionCode) + .append(".apk") + .toString() + } +} + dependencies { - implementation project(':multiple-status-view') -// implementation rootProject.ext.multipleStatusView + // implementation project(':multiple-status-view') + implementation rootProject.ext.multipleStatusView implementation rootProject.ext.supportAppcompatV7 implementation rootProject.ext.supportRecyclerView implementation rootProject.ext.supportDesign diff --git a/app/src/main/java/com/classic/common/simple/AbsActivity.java b/app/src/main/java/com/classic/common/simple/AbsActivity.java index 0e2d6ee..bfaae39 100644 --- a/app/src/main/java/com/classic/common/simple/AbsActivity.java +++ b/app/src/main/java/com/classic/common/simple/AbsActivity.java @@ -15,7 +15,7 @@ public abstract class AbsActivity extends AppCompatActivity implements View.OnClickListener { - static final int DELAY = 5000; + static final int DELAY = 2000; MultipleStatusView mMultipleStatusView; FloatingActionMenu mFloatingActionMenu; @@ -25,6 +25,14 @@ public abstract class AbsActivity extends AppCompatActivity implements View.OnCl FloatingActionButton mNoNetworkFab; FloatingActionButton mContentFab; + private final Runnable callback = new Runnable() { + @Override public void run() { + if (!isFinishing() && null != mMultipleStatusView) { + mMultipleStatusView.showContent(); + } + } + }; + abstract void initView(); @Override protected void onCreate(Bundle savedInstanceState) { @@ -50,13 +58,15 @@ public abstract class AbsActivity extends AppCompatActivity implements View.OnCl mMultipleStatusView.setOnViewStatusChangeListener(mViewStatusChangeListener); } + @Override + protected void onDestroy() { + if (null != mMultipleStatusView) mMultipleStatusView.removeCallbacks(callback); + super.onDestroy(); + } + void loading() { mMultipleStatusView.showLoading(); - mMultipleStatusView.postDelayed(new Runnable() { - @Override public void run() { - mMultipleStatusView.showContent(); - } - }, DELAY); + mMultipleStatusView.postDelayed(callback, DELAY); } final View.OnClickListener mRetryClickListener = new View.OnClickListener() { @@ -88,13 +98,16 @@ public void onChange(int oldViewStatus, int newViewStatus) { loading(); break; case R.id.fab_empty: - mMultipleStatusView.showEmpty(); + // mMultipleStatusView.showEmpty(); + mMultipleStatusView.showEmpty(R.string.test_hint_content, "aa", "bb"); break; case R.id.fab_error: - mMultipleStatusView.showError(); + // mMultipleStatusView.showError(); + mMultipleStatusView.showError("自定义错误文本"); break; case R.id.fab_no_network: - mMultipleStatusView.showNoNetwork(); + // mMultipleStatusView.showNoNetwork(); + mMultipleStatusView.showNoNetwork("自定义无网络文本"); break; case R.id.fab_content: mMultipleStatusView.showContent(); diff --git a/app/src/main/java/com/classic/common/simple/Simple3Activity.java b/app/src/main/java/com/classic/common/simple/Simple3Activity.java index f69d884..bd10ddb 100644 --- a/app/src/main/java/com/classic/common/simple/Simple3Activity.java +++ b/app/src/main/java/com/classic/common/simple/Simple3Activity.java @@ -1,5 +1,6 @@ package com.classic.common.simple; +import android.view.View; import android.view.ViewGroup; import com.classic.common.MultipleStatusView; @@ -10,11 +11,28 @@ public class Simple3Activity extends AbsActivity { void initView() { setContentView(R.layout.activity_simple3); setTitle("Simple3Activity"); - ViewGroup ll_content = findViewById(R.id.ll_content); mMultipleStatusView = MultipleStatusView.attach(ll_content); - if (null != mMultipleStatusView) { - mMultipleStatusView.setOnRetryClickListener(mRetryClickListener); + } + + @Override public void onClick(View v) { + switch (v.getId()) { + case R.id.fab_loading: + loading(); + break; + case R.id.fab_empty: + mMultipleStatusView.showEmpty(); + break; + case R.id.fab_error: + mMultipleStatusView.showError(); + break; + case R.id.fab_no_network: + mMultipleStatusView.showNoNetwork(); + break; + case R.id.fab_content: + mMultipleStatusView.showContent(); + break; } + mFloatingActionMenu.toggle(false); } } diff --git a/app/src/main/res/layout/activity_simple3.xml b/app/src/main/res/layout/activity_simple3.xml index 8cc4b60..b53276e 100644 --- a/app/src/main/res/layout/activity_simple3.xml +++ b/app/src/main/res/layout/activity_simple3.xml @@ -24,16 +24,15 @@ android:id="@+id/ll_content" android:layout_width="match_parent" android:layout_height="match_parent" + android:gravity="center" android:orientation="vertical"> + android:textSize="20sp"/> @@ -41,5 +40,4 @@ - diff --git a/app/src/main/res/layout/custom_empty_view.xml b/app/src/main/res/layout/custom_empty_view.xml index 8c82e74..81601b6 100644 --- a/app/src/main/res/layout/custom_empty_view.xml +++ b/app/src/main/res/layout/custom_empty_view.xml @@ -14,7 +14,7 @@ \ No newline at end of file diff --git a/app/src/main/res/layout/custom_error_view.xml b/app/src/main/res/layout/custom_error_view.xml index 3263825..56bb609 100644 --- a/app/src/main/res/layout/custom_error_view.xml +++ b/app/src/main/res/layout/custom_error_view.xml @@ -14,7 +14,7 @@ \ No newline at end of file diff --git a/app/src/main/res/layout/custom_no_network_view.xml b/app/src/main/res/layout/custom_no_network_view.xml index fd4bf1b..e8959ac 100644 --- a/app/src/main/res/layout/custom_no_network_view.xml +++ b/app/src/main/res/layout/custom_no_network_view.xml @@ -14,7 +14,7 @@ \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index db44ad5..a0cffbb 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,4 +1,5 @@ MultipleStatusView ListActivity + 自定义提示内容,%s占位符测试%s diff --git a/build.gradle b/build.gradle index 5610e30..707b9e1 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.3.1' + classpath 'com.android.tools.build:gradle:3.5.2' classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4' } diff --git a/config.gradle b/config.gradle index b8c44c8..b9941e3 100644 --- a/config.gradle +++ b/config.gradle @@ -8,8 +8,8 @@ ext { applicationId : "com.classic.common.simple", minSdkVersion : 14, targetSdkVersion : 28, - versionCode : 8, - versionName : "1.6" + versionCode : 9, + versionName : "1.7" ] resourcePrefix = "MultipleStatusView" @@ -23,7 +23,7 @@ ext { junit = "junit:junit:4.12" - multipleStatusView = "com.classic.common:multiple-status-view:1.6" + multipleStatusView = "com.classic.common:multiple-status-view:1.7" loadingView = "com.wang.avi:library:2.1.3" // https://github.com/81813780/AVLoadingIndicatorView fab = "com.github.clans:fab:1.6.4" // https://github.com/Clans/FloatingActionButton adapter = "com.classic.adapter:commonadapter:2.0" diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1e014f4..233beb0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.6-all.zip diff --git a/multiple-status-view/src/main/java/com/classic/common/MultipleStatusView.java b/multiple-status-view/src/main/java/com/classic/common/MultipleStatusView.java index d099241..3a33744 100644 --- a/multiple-status-view/src/main/java/com/classic/common/MultipleStatusView.java +++ b/multiple-status-view/src/main/java/com/classic/common/MultipleStatusView.java @@ -9,7 +9,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; - +import android.widget.TextView; import java.util.ArrayList; /** @@ -119,6 +119,27 @@ public final void showEmpty() { showEmpty(mEmptyViewResId, DEFAULT_LAYOUT_PARAMS); } + /** + * 显示空视图 + * + * @param hintResId 自定义提示文本内容 + * @param formatArgs 占位符参数 + */ + public final void showEmpty(int hintResId, Object... formatArgs) { + showEmpty(); + setStatusHintContent(mEmptyView, hintResId, formatArgs); + } + + /** + * 显示空视图 + * + * @param hint 自定义提示文本内容 + */ + public final void showEmpty(String hint) { + showEmpty(); + setStatusHintContent(mEmptyView, hint); + } + /** * 显示空视图 * @@ -158,6 +179,27 @@ public final void showError() { showError(mErrorViewResId, DEFAULT_LAYOUT_PARAMS); } + /** + * 显示错误视图 + * + * @param hintResId 自定义提示文本内容 + * @param formatArgs 占位符参数 + */ + public final void showError(int hintResId, Object... formatArgs) { + showError(); + setStatusHintContent(mErrorView, hintResId, formatArgs); + } + + /** + * 显示错误视图 + * + * @param hint 自定义提示文本内容 + */ + public final void showError(String hint) { + showError(); + setStatusHintContent(mErrorView, hint); + } + /** * 显示错误视图 * @@ -197,6 +239,27 @@ public final void showLoading() { showLoading(mLoadingViewResId, DEFAULT_LAYOUT_PARAMS); } + /** + * 显示加载中视图 + * + * @param hintResId 自定义提示文本内容 + * @param formatArgs 占位符参数 + */ + public final void showLoading(int hintResId, Object... formatArgs) { + showLoading(); + setStatusHintContent(mLoadingView, hintResId, formatArgs); + } + + /** + * 显示加载中视图 + * + * @param hint 自定义提示文本内容 + */ + public final void showLoading(String hint) { + showLoading(); + setStatusHintContent(mLoadingView, hint); + } + /** * 显示加载中视图 * @@ -232,6 +295,27 @@ public final void showNoNetwork() { showNoNetwork(mNoNetworkViewResId, DEFAULT_LAYOUT_PARAMS); } + /** + * 显示无网络视图 + * + * @param hintResId 自定义提示文本内容 + * @param formatArgs 占位符参数 + */ + public final void showNoNetwork(int hintResId, Object... formatArgs) { + showNoNetwork(); + setStatusHintContent(mNoNetworkView, hintResId, formatArgs); + } + + /** + * 显示无网络视图 + * + * @param hint 自定义提示文本内容 + */ + public final void showNoNetwork(String hint) { + showNoNetwork(); + setStatusHintContent(mNoNetworkView, hint); + } + /** * 显示无网络视图 * @@ -302,6 +386,21 @@ public final void showContent(View view, ViewGroup.LayoutParams layoutParams) { showViewById(mContentView.getId()); } + private void setStatusHintContent(View view, int resId, Object... formatArgs) { + checkNull(view, "Target view is null."); + setStatusHintContent(view, view.getContext().getString(resId, formatArgs)); + } + + private void setStatusHintContent(View view, String hint) { + checkNull(view, "Target view is null."); + TextView hintView = view.findViewById(R.id.status_hint_content); + if (null != hintView) { + hintView.setText(hint); + } else { + throw new NullPointerException("Not find the view ID `status_hint_content`"); + } + } + private View inflateView(int layoutId) { return mInflater.inflate(layoutId, null); } @@ -385,13 +484,11 @@ private void changeViewStatus(int newViewStatus) { private void setContentViewResId(int contentViewResId) { this.mContentViewResId = contentViewResId; this.mContentView = mInflater.inflate(mContentViewResId, null); - addView(mContentView, 0, DEFAULT_LAYOUT_PARAMS); } private void setContentView(ViewGroup contentView) { this.mContentView = contentView; - addView(mContentView, 0, DEFAULT_LAYOUT_PARAMS); } @@ -399,7 +496,6 @@ public static MultipleStatusView attach(Fragment fragment, int rootAnchor) { if (null == fragment || fragment.getView() == null) { throw new IllegalArgumentException("fragment is null or fragment.getView is null"); } - if (-1 != rootAnchor) { ViewGroup contentAnchor = fragment.getView().findViewById(rootAnchor); if (null != contentAnchor) { @@ -417,7 +513,6 @@ public static MultipleStatusView attach(Activity activity, int rootAnchor) { attach(contentAnchor); } } - ViewGroup defaultAnchor = activity.findViewById(android.R.id.content); return attach(defaultAnchor); } @@ -426,21 +521,16 @@ public static MultipleStatusView attach(ViewGroup rootAnchor) { if (null == rootAnchor) { throw new IllegalArgumentException("root Anchor View can't be null"); } - ViewGroup parent = (ViewGroup) rootAnchor.getParent(); int anchorIndex = parent.indexOfChild(rootAnchor); if (-1 != anchorIndex) { parent.removeView(rootAnchor); - MultipleStatusView statusView = new MultipleStatusView(rootAnchor.getContext()); statusView.setContentView(rootAnchor); - ViewGroup.LayoutParams p = rootAnchor.getLayoutParams(); - parent.addView(statusView,anchorIndex, p); - + parent.addView(statusView, anchorIndex, p); return statusView; } return null; } - } diff --git a/multiple-status-view/src/main/res/values/ids.xml b/multiple-status-view/src/main/res/values/ids.xml index 3976824..655af57 100644 --- a/multiple-status-view/src/main/res/values/ids.xml +++ b/multiple-status-view/src/main/res/values/ids.xml @@ -5,6 +5,7 @@ +