ae36b1e38cdc09b252786165f3c53dd4ee93dbd8.svn-base 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. package eVVM.apk.helper;
  2. import android.app.Activity;
  3. import android.app.Application;
  4. import android.os.Bundle;
  5. import android.text.Editable;
  6. import android.text.TextWatcher;
  7. import android.view.View;
  8. import android.widget.TextView;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. /**
  12. * desc : 文本输入辅助类,通过管理多个 TextView 输入是否为空来启用或者禁用按钮的点击事件
  13. */
  14. public final class InputTextHelper implements TextWatcher {
  15. private View mView; // 操作按钮的View
  16. private boolean isAlpha; // 是否禁用后设置半透明度
  17. private List<TextView> mViewSet; // TextView集合
  18. public InputTextHelper(View view) {
  19. this(view, false);
  20. }
  21. /**
  22. * 构造函数
  23. *
  24. * @param view 跟随 TextView 输入为空来判断启动或者禁用这个 View
  25. * @param alpha 是否需要设置透明度
  26. */
  27. public InputTextHelper(View view, boolean alpha) {
  28. if (view == null) throw new IllegalArgumentException("The view is empty");
  29. mView = view;
  30. isAlpha = alpha;
  31. }
  32. /**
  33. * 添加 TextView
  34. *
  35. * @param views 传入单个或者多个 TextView
  36. */
  37. public void addViews(List<TextView> views) {
  38. if (views == null) return;
  39. if (mViewSet == null) {
  40. mViewSet = views;
  41. } else {
  42. mViewSet.addAll(views);
  43. }
  44. for (TextView view : views) {
  45. view.addTextChangedListener(this);
  46. }
  47. // 触发一次监听
  48. afterTextChanged(null);
  49. }
  50. /**
  51. * 添加 TextView
  52. *
  53. * @param views 传入单个或者多个 TextView
  54. */
  55. public void addViews(TextView... views) {
  56. if (views == null) return;
  57. if (mViewSet == null) {
  58. mViewSet = new ArrayList<>(views.length - 1);
  59. }
  60. for (TextView view : views) {
  61. view.addTextChangedListener(this);
  62. mViewSet.add(view);
  63. }
  64. // 触发一次监听
  65. afterTextChanged(null);
  66. }
  67. /**
  68. * 移除 TextView 监听,避免内存泄露
  69. */
  70. public void removeViews() {
  71. if (mViewSet == null) return;
  72. for (TextView view : mViewSet) {
  73. view.removeTextChangedListener(this);
  74. }
  75. mViewSet.clear();
  76. mViewSet = null;
  77. }
  78. /**
  79. * {@link TextWatcher}
  80. */
  81. @Override
  82. public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
  83. @Override
  84. public void onTextChanged(CharSequence s, int start, int before, int count) {}
  85. @Override
  86. public void afterTextChanged(Editable s) {
  87. if (mViewSet == null) return;
  88. for (TextView view : mViewSet) {
  89. if ("".equals(view.getText().toString())) {
  90. setEnabled(false);
  91. return;
  92. }
  93. }
  94. setEnabled(true);
  95. }
  96. /**
  97. * 设置 View 的事件
  98. *
  99. * @param enabled 启用或者禁用 View 的事件
  100. */
  101. public void setEnabled(boolean enabled) {
  102. if (enabled == mView.isEnabled()) return;
  103. if (enabled) {
  104. //启用View的事件
  105. mView.setEnabled(true);
  106. if (isAlpha) {
  107. //设置不透明
  108. mView.setAlpha(1f);
  109. }
  110. }else {
  111. //禁用View的事件
  112. mView.setEnabled(false);
  113. if (isAlpha) {
  114. //设置半透明
  115. mView.setAlpha(0.5f);
  116. }
  117. }
  118. }
  119. public static final class Builder implements Application.ActivityLifecycleCallbacks {
  120. private Activity mActivity; // 当前的Activity
  121. private View mView; // 操作按钮的View
  122. private boolean isAlpha; // 是否禁用后设置半透明度
  123. private List<TextView> mViewSet = new ArrayList<>(); // TextView集合
  124. InputTextHelper mTextHelper;
  125. public Builder() {
  126. }
  127. public Builder(Activity activity) {
  128. mActivity = activity;
  129. }
  130. public Builder setMain(View view) {
  131. mView = view;
  132. return this;
  133. }
  134. public Builder setAlpha(boolean alpha) {
  135. isAlpha = alpha;
  136. return this;
  137. }
  138. public Builder addView(TextView view) {
  139. mViewSet.add(view);
  140. return this;
  141. }
  142. public InputTextHelper build(){
  143. if (mActivity != null) {
  144. mActivity.getApplication().registerActivityLifecycleCallbacks(this);
  145. }
  146. mTextHelper = new InputTextHelper(mView, isAlpha);
  147. mTextHelper.addViews(mViewSet);
  148. return mTextHelper;
  149. }
  150. @Override
  151. public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
  152. }
  153. @Override
  154. public void onActivityStarted(Activity activity) {
  155. }
  156. @Override
  157. public void onActivityResumed(Activity activity) {
  158. }
  159. @Override
  160. public void onActivityPaused(Activity activity) {
  161. }
  162. @Override
  163. public void onActivityStopped(Activity activity) {
  164. }
  165. @Override
  166. public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
  167. }
  168. @Override
  169. public void onActivityDestroyed(Activity activity) {
  170. if (mActivity != null && mActivity == activity) {
  171. mTextHelper.removeViews();
  172. }
  173. }
  174. }
  175. }