MainActivity.java 42 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920
  1. package com.kongzue.dialogxdemo;
  2. import android.content.ActivityNotFoundException;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.content.res.Configuration;
  6. import android.graphics.Color;
  7. import android.net.Uri;
  8. import android.view.View;
  9. import android.view.ViewGroup;
  10. import android.view.inputmethod.InputMethodManager;
  11. import android.webkit.WebSettings;
  12. import android.webkit.WebView;
  13. import android.webkit.WebViewClient;
  14. import android.widget.EditText;
  15. import android.widget.ImageView;
  16. import android.widget.LinearLayout;
  17. import android.widget.RadioButton;
  18. import android.widget.RadioGroup;
  19. import android.widget.RelativeLayout;
  20. import android.widget.TextView;
  21. import androidx.annotation.NonNull;
  22. import androidx.recyclerview.widget.LinearLayoutManager;
  23. import androidx.recyclerview.widget.RecyclerView;
  24. import com.kongzue.baseframework.BaseActivity;
  25. import com.kongzue.baseframework.interfaces.DarkNavigationBarTheme;
  26. import com.kongzue.baseframework.interfaces.DarkStatusBarTheme;
  27. import com.kongzue.baseframework.interfaces.Layout;
  28. import com.kongzue.baseframework.interfaces.NavigationBarBackgroundColorRes;
  29. import com.kongzue.baseframework.util.CycleRunner;
  30. import com.kongzue.baseframework.util.JumpParameter;
  31. import com.kongzue.dialogx.DialogX;
  32. import com.kongzue.dialogx.dialogs.BottomDialog;
  33. import com.kongzue.dialogx.dialogs.BottomMenu;
  34. import com.kongzue.dialogx.dialogs.CustomDialog;
  35. import com.kongzue.dialogx.dialogs.FullScreenDialog;
  36. import com.kongzue.dialogx.dialogs.InputDialog;
  37. import com.kongzue.dialogx.dialogs.MessageDialog;
  38. import com.kongzue.dialogx.dialogs.PopTip;
  39. import com.kongzue.dialogx.dialogs.TipDialog;
  40. import com.kongzue.dialogx.dialogs.WaitDialog;
  41. import com.kongzue.dialogx.interfaces.BaseDialog;
  42. import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
  43. import com.kongzue.dialogx.interfaces.OnBackPressedListener;
  44. import com.kongzue.dialogx.interfaces.OnBindView;
  45. import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
  46. import com.kongzue.dialogx.interfaces.OnIconChangeCallBack;
  47. import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
  48. import com.kongzue.dialogx.interfaces.OnMenuItemClickListener;
  49. import com.kongzue.dialogx.interfaces.OnMenuItemSelectListener;
  50. import com.kongzue.dialogx.style.IOSStyle;
  51. import com.kongzue.dialogx.style.KongzueStyle;
  52. import com.kongzue.dialogx.style.MIUIStyle;
  53. import com.kongzue.dialogx.style.MaterialStyle;
  54. import com.kongzue.dialogx.util.TextInfo;
  55. import com.kongzue.dialogxdemo.custom.CustomRecycleViewAdapter;
  56. import java.util.ArrayList;
  57. import java.util.List;
  58. @Layout(R.layout.activity_main)
  59. @DarkStatusBarTheme(true)
  60. @DarkNavigationBarTheme(true)
  61. @NavigationBarBackgroundColorRes(R.color.emptyNavBar)
  62. public class MainActivity extends BaseActivity {
  63. private RelativeLayout boxTable;
  64. private LinearLayout boxTableChild;
  65. private LinearLayout btnBack;
  66. private ImageView btnShare;
  67. private TextView txtTitle;
  68. private LinearLayout boxBody;
  69. private RadioGroup grpMode;
  70. private RadioButton rdoModeView;
  71. private RadioButton rdoModeWindow;
  72. private RadioButton rdoModeDialogFragment;
  73. private RadioGroup grpStyle;
  74. private RadioButton rdoMaterial;
  75. private RadioButton rdoIos;
  76. private RadioButton rdoKongzue;
  77. private RadioButton rdoMiui;
  78. private RadioGroup grpTheme;
  79. private RadioButton rdoAuto;
  80. private RadioButton rdoLight;
  81. private RadioButton rdoDark;
  82. private TextView btnMessageDialog;
  83. private TextView btnSelectDialog;
  84. private TextView btnInputDialog;
  85. private TextView btnWaitDialog;
  86. private TextView btnWaitAndTipDialog;
  87. private TextView btnTipSuccess;
  88. private TextView btnTipWarning;
  89. private TextView btnTipError;
  90. private TextView btnTipProgress;
  91. private TextView btnPoptip;
  92. private TextView btnPoptipBigMessage;
  93. private TextView btnBottomDialog;
  94. private TextView btnBottomMenu;
  95. private TextView btnBottomReply;
  96. private TextView btnBottomSelectMenu;
  97. private TextView btnBottomMultiSelectMenu;
  98. private TextView btnBottomCustomRecycleView;
  99. private TextView btnCustomMessageDialog;
  100. private TextView btnCustomInputDialog;
  101. private TextView btnCustomBottomMenu;
  102. private TextView btnCustomDialog;
  103. private TextView btnFullScreenDialogWebPage;
  104. private TextView btnFullScreenDialogLogin;
  105. private TextView btnShowBreak;
  106. @Override
  107. public void initViews() {
  108. boxTable = findViewById(R.id.box_table);
  109. boxTableChild = findViewById(R.id.box_table_child);
  110. btnBack = findViewById(R.id.btn_back);
  111. btnShare = findViewById(R.id.btn_share);
  112. txtTitle = findViewById(R.id.txt_title);
  113. boxBody = findViewById(R.id.box_body);
  114. grpMode = findViewById(R.id.grp_mode);
  115. rdoModeView = findViewById(R.id.rdo_mode_view);
  116. rdoModeWindow = findViewById(R.id.rdo_mode_window);
  117. rdoModeDialogFragment = findViewById(R.id.rdo_mode_dialogFragment);
  118. grpStyle = findViewById(R.id.grp_style);
  119. rdoMaterial = findViewById(R.id.rdo_material);
  120. rdoIos = findViewById(R.id.rdo_ios);
  121. rdoKongzue = findViewById(R.id.rdo_kongzue);
  122. rdoMiui = findViewById(R.id.rdo_miui);
  123. grpTheme = findViewById(R.id.grp_theme);
  124. rdoAuto = findViewById(R.id.rdo_auto);
  125. rdoLight = findViewById(R.id.rdo_light);
  126. rdoDark = findViewById(R.id.rdo_dark);
  127. btnMessageDialog = findViewById(R.id.btn_messageDialog);
  128. btnSelectDialog = findViewById(R.id.btn_selectDialog);
  129. btnInputDialog = findViewById(R.id.btn_inputDialog);
  130. btnWaitDialog = findViewById(R.id.btn_waitDialog);
  131. btnWaitAndTipDialog = findViewById(R.id.btn_waitAndTipDialog);
  132. btnTipSuccess = findViewById(R.id.btn_tipSuccess);
  133. btnTipWarning = findViewById(R.id.btn_tipWarning);
  134. btnTipError = findViewById(R.id.btn_tipError);
  135. btnTipProgress = findViewById(R.id.btn_tipProgress);
  136. btnPoptip = findViewById(R.id.btn_poptip);
  137. btnPoptipBigMessage = findViewById(R.id.btn_poptip_bigMessage);
  138. btnBottomDialog = findViewById(R.id.btn_bottom_dialog);
  139. btnBottomMenu = findViewById(R.id.btn_bottom_menu);
  140. btnBottomReply = findViewById(R.id.btn_bottom_reply);
  141. btnBottomSelectMenu = findViewById(R.id.btn_bottom_select_menu);
  142. btnBottomMultiSelectMenu = findViewById(R.id.btn_bottom_multiSelect_menu);
  143. btnBottomCustomRecycleView = findViewById(R.id.btn_bottom_custom_recycleView);
  144. btnCustomMessageDialog = findViewById(R.id.btn_customMessageDialog);
  145. btnCustomInputDialog = findViewById(R.id.btn_customInputDialog);
  146. btnCustomBottomMenu = findViewById(R.id.btn_customBottomMenu);
  147. btnCustomDialog = findViewById(R.id.btn_customDialog);
  148. btnFullScreenDialogWebPage = findViewById(R.id.btn_fullScreenDialog_webPage);
  149. btnFullScreenDialogLogin = findViewById(R.id.btn_fullScreenDialog_login);
  150. btnShowBreak = findViewById(R.id.btn_showBreak);
  151. }
  152. @Override
  153. public void initDatas(JumpParameter parameter) {
  154. refreshUIMode();
  155. boolean showBreak = parameter.getBoolean("showBreak");
  156. if (showBreak) {
  157. txtTitle.setText("显示Dialog时关闭Activity演示");
  158. MessageDialog.show("提示", "接下来会直接运行一个 WaitDialog,2 秒后直接关闭 Activity,并回到原 Activity,保证程序不会出现 WindowLeaked 错误。\n\n" +
  159. "Android 原生 AlertDialog 常出现因 Dialog 先于 Activity 关闭而导致此错误引发程序崩溃。\n\n" +
  160. "而使用 DialogX 构建的对话框不仅仅不会出现此问题,还可避免因句柄持续持有导致的内存泄漏。", "开始测试", "取消")
  161. .setOkButton(new OnDialogButtonClickListener() {
  162. @Override
  163. public boolean onClick(BaseDialog baseDialog, View v) {
  164. WaitDialog.show("请稍后...");
  165. runDelayed(new Runnable() {
  166. @Override
  167. public void run() {
  168. finish(); //先结束掉本界面
  169. }
  170. }, 2000);
  171. return false;
  172. }
  173. })
  174. .setCancelButton(new OnDialogButtonClickListener() {
  175. @Override
  176. public boolean onClick(BaseDialog baseDialog, View v) {
  177. finish();
  178. return false;
  179. }
  180. })
  181. .setCancelable(false);
  182. }
  183. switch (DialogX.implIMPLMode) {
  184. case VIEW:
  185. rdoModeView.setChecked(true);
  186. break;
  187. case WINDOW:
  188. rdoModeWindow.setChecked(true);
  189. break;
  190. case DIALOG_FRAGMENT:
  191. rdoModeDialogFragment.setChecked(true);
  192. break;
  193. }
  194. txtTitle.setText("Kongzue DialogX (" + BuildConfig.VERSION_NAME + ")");
  195. }
  196. //用于模拟进度提示
  197. private CycleRunner cycleRunner;
  198. private float progress = 0;
  199. private int waitId;
  200. private TextView btnReplyCommit;
  201. private EditText editReplyCommit;
  202. private TextView btnCancel;
  203. private TextView btnSubmit;
  204. private RelativeLayout boxUserName;
  205. private EditText editUserName;
  206. private RelativeLayout boxPassword;
  207. private EditText editPassword;
  208. private TextView btnClose;
  209. private WebView webView;
  210. private String[] singleSelectMenuText = new String[]{"拒绝", "询问", "始终允许", "仅在使用中允许"};
  211. private int selectMenuIndex;
  212. private String[] multiSelectMenuText = new String[]{"上海", "北京", "广州", "深圳"};
  213. private int[] selectMenuIndexArray;
  214. private String multiSelectMenuResultCache;
  215. @Override
  216. public void setEvents() {
  217. grpMode.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  218. @Override
  219. public void onCheckedChanged(RadioGroup group, int checkedId) {
  220. BaseDialog.cleanAll();
  221. switch (checkedId) {
  222. case R.id.rdo_mode_view:
  223. DialogX.implIMPLMode = DialogX.IMPL_MODE.VIEW;
  224. break;
  225. case R.id.rdo_mode_window:
  226. DialogX.implIMPLMode = DialogX.IMPL_MODE.WINDOW;
  227. break;
  228. case R.id.rdo_mode_dialogFragment:
  229. DialogX.implIMPLMode = DialogX.IMPL_MODE.DIALOG_FRAGMENT;
  230. break;
  231. }
  232. }
  233. });
  234. grpTheme.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  235. @Override
  236. public void onCheckedChanged(RadioGroup group, int checkedId) {
  237. switch (checkedId) {
  238. case R.id.rdo_auto:
  239. DialogX.globalTheme = DialogX.THEME.AUTO;
  240. break;
  241. case R.id.rdo_light:
  242. DialogX.globalTheme = DialogX.THEME.LIGHT;
  243. break;
  244. case R.id.rdo_dark:
  245. DialogX.globalTheme = DialogX.THEME.DARK;
  246. break;
  247. }
  248. }
  249. });
  250. grpStyle.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
  251. @Override
  252. public void onCheckedChanged(RadioGroup group, int checkedId) {
  253. DialogX.cancelButtonText = "取消";
  254. switch (checkedId) {
  255. case R.id.rdo_material:
  256. DialogX.globalStyle = MaterialStyle.style();
  257. DialogX.cancelButtonText = "";
  258. break;
  259. case R.id.rdo_kongzue:
  260. DialogX.globalStyle = KongzueStyle.style();
  261. break;
  262. case R.id.rdo_ios:
  263. DialogX.globalStyle = IOSStyle.style();
  264. break;
  265. case R.id.rdo_miui:
  266. DialogX.globalStyle = MIUIStyle.style();
  267. break;
  268. }
  269. }
  270. });
  271. btnMessageDialog.setOnClickListener(new View.OnClickListener() {
  272. @Override
  273. public void onClick(View view) {
  274. MessageDialog.show("标题", "这里是正文内容。", "确定").setOkButton(new OnDialogButtonClickListener<MessageDialog>() {
  275. @Override
  276. public boolean onClick(MessageDialog baseDialog, View v) {
  277. PopTip.show("点击确定按钮");
  278. return false;
  279. }
  280. });
  281. }
  282. });
  283. btnSelectDialog.setOnClickListener(new View.OnClickListener() {
  284. @Override
  285. public void onClick(View v) {
  286. MessageDialog messageDialog = new MessageDialog("多选对话框", "移除App会将它从主屏幕移除并保留其所有数据。", "删除App", "取消", "移至App资源库")
  287. .setButtonOrientation(LinearLayout.VERTICAL);
  288. if (!rdoMiui.isChecked()) {
  289. messageDialog.setOkTextInfo(new TextInfo().setFontColor(Color.parseColor("#EB5545")));
  290. }
  291. messageDialog.show();
  292. }
  293. });
  294. btnInputDialog.setOnClickListener(new View.OnClickListener() {
  295. @Override
  296. public void onClick(View view) {
  297. new InputDialog("标题", "正文内容", "确定", "取消", "正在输入的文字")
  298. .setInputText("Hello World")
  299. .setCancelable(false)
  300. .setOkButton(new OnInputDialogButtonClickListener<InputDialog>() {
  301. @Override
  302. public boolean onClick(InputDialog baseDialog, View v, String inputStr) {
  303. PopTip.show("输入的内容:" + inputStr);
  304. return false;
  305. }
  306. })
  307. .show();
  308. }
  309. });
  310. btnWaitDialog.setOnClickListener(new View.OnClickListener() {
  311. @Override
  312. public void onClick(View v) {
  313. WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener() {
  314. @Override
  315. public boolean onBackPressed() {
  316. PopTip.show("按下返回");
  317. return false;
  318. }
  319. });
  320. runDelayed(new Runnable() {
  321. @Override
  322. public void run() {
  323. WaitDialog.dismiss();
  324. }
  325. }, 2000);
  326. }
  327. });
  328. btnWaitAndTipDialog.setOnClickListener(new View.OnClickListener() {
  329. boolean closeFlag = false;
  330. @Override
  331. public void onClick(View v) {
  332. closeFlag = false;
  333. WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener() {
  334. @Override
  335. public boolean onBackPressed() {
  336. PopTip.show("按下返回", "关闭").setButton(new OnDialogButtonClickListener<PopTip>() {
  337. @Override
  338. public boolean onClick(PopTip baseDialog, View v) {
  339. closeFlag = true;
  340. WaitDialog.dismiss();
  341. return false;
  342. }
  343. });
  344. return false;
  345. }
  346. });
  347. if (!closeFlag) runDelayed(new Runnable() {
  348. @Override
  349. public void run() {
  350. if (!closeFlag) TipDialog.show("完成!", WaitDialog.TYPE.SUCCESS);
  351. }
  352. }, 2000);
  353. }
  354. });
  355. btnTipSuccess.setOnClickListener(new View.OnClickListener() {
  356. @Override
  357. public void onClick(View v) {
  358. TipDialog.show("Success!", WaitDialog.TYPE.SUCCESS);
  359. }
  360. });
  361. btnTipWarning.setOnClickListener(new View.OnClickListener() {
  362. @Override
  363. public void onClick(View v) {
  364. TipDialog.show("Warning!", WaitDialog.TYPE.WARNING);
  365. }
  366. });
  367. btnTipError.setOnClickListener(new View.OnClickListener() {
  368. @Override
  369. public void onClick(View v) {
  370. TipDialog.show("Error!", WaitDialog.TYPE.ERROR);
  371. }
  372. });
  373. btnTipProgress.setOnClickListener(new View.OnClickListener() {
  374. @Override
  375. public void onClick(View v) {
  376. waitId = 0;
  377. progress = 0;
  378. WaitDialog.show("假装连接...").setOnBackPressedListener(new OnBackPressedListener() {
  379. @Override
  380. public boolean onBackPressed() {
  381. MessageDialog.show("正在进行", "是否取消?", "是", "否").setOkButton(new OnDialogButtonClickListener() {
  382. @Override
  383. public boolean onClick(BaseDialog baseDialog, View v) {
  384. waitId = -1;
  385. WaitDialog.dismiss();
  386. return false;
  387. }
  388. });
  389. return false;
  390. }
  391. });
  392. runOnMainDelayed(new Runnable() {
  393. @Override
  394. public void run() {
  395. if (waitId != 0) {
  396. return;
  397. }
  398. cycleRunner = runOnMainCycle(new Runnable() {
  399. @Override
  400. public void run() {
  401. if (waitId != 0) {
  402. cycleRunner.cancel();
  403. return;
  404. }
  405. progress = progress + 0.1f;
  406. if (progress < 1f) {
  407. WaitDialog.show("假装加载" + ((int) (progress * 100)) + "%", progress);
  408. } else {
  409. TipDialog.show("加载完成", WaitDialog.TYPE.SUCCESS);
  410. cycleRunner.cancel();
  411. }
  412. }
  413. }, 1000, 1000);
  414. }
  415. }, 3000);
  416. }
  417. });
  418. btnBottomDialog.setOnClickListener(new View.OnClickListener() {
  419. @Override
  420. public void onClick(View v) {
  421. String s = rdoMaterial.isChecked() ? "你可以向下滑动来关闭这个对话框" : "你可以点击空白区域或返回键来关闭这个对话框";
  422. new BottomDialog("标题", "这里是对话框内容。\n" + s + "。\n底部对话框也支持自定义布局扩展使用方式。",
  423. new OnBindView<BottomDialog>(R.layout.layout_custom_view) {
  424. @Override
  425. public void onBind(BottomDialog dialog, View v) {
  426. v.setOnClickListener(new View.OnClickListener() {
  427. @Override
  428. public void onClick(View v) {
  429. PopTip.show("Click Custom View");
  430. }
  431. });
  432. }
  433. })
  434. .show();
  435. }
  436. });
  437. btnBottomMenu.setOnClickListener(new View.OnClickListener() {
  438. @Override
  439. public void onClick(View v) {
  440. if (rdoMaterial.isChecked()) {
  441. //Material 可滑动展开 BottomMenu 演示
  442. //因数据量大,尝试异步线程启动
  443. new Thread() {
  444. @Override
  445. public void run() {
  446. super.run();
  447. BottomMenu.build()
  448. .setMenuList(new String[]{"添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐", "添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐"})
  449. .setOnIconChangeCallBack(new OnIconChangeCallBack(true) {
  450. @Override
  451. public int getIcon(BottomMenu bottomMenu, int index, String menuText) {
  452. switch (menuText) {
  453. case "添加":
  454. return R.mipmap.img_dialogx_demo_add;
  455. case "查看":
  456. return R.mipmap.img_dialogx_demo_view;
  457. case "编辑":
  458. return R.mipmap.img_dialogx_demo_edit;
  459. case "删除":
  460. return R.mipmap.img_dialogx_demo_delete;
  461. case "分享":
  462. return R.mipmap.img_dialogx_demo_share;
  463. case "评论":
  464. return R.mipmap.img_dialogx_demo_comment;
  465. case "下载":
  466. return R.mipmap.img_dialogx_demo_download;
  467. case "收藏":
  468. return R.mipmap.img_dialogx_demo_favorite;
  469. case "赞!":
  470. return R.mipmap.img_dialogx_demo_good;
  471. case "不喜欢":
  472. return R.mipmap.img_dialogx_demo_dislike;
  473. case "所属专辑":
  474. return R.mipmap.img_dialogx_demo_album;
  475. case "复制链接":
  476. return R.mipmap.img_dialogx_demo_link;
  477. case "类似推荐":
  478. return R.mipmap.img_dialogx_demo_recommend;
  479. }
  480. return 0;
  481. }
  482. })
  483. .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  484. @Override
  485. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  486. PopTip.show(text);
  487. return false;
  488. }
  489. })
  490. .show();
  491. }
  492. }.start();
  493. } else {
  494. BottomMenu.show(new String[]{"新标签页中打开", "稍后阅读", "复制链接网址"})
  495. .setMessage("http://www.kongzue.com/DialogX")
  496. .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  497. @Override
  498. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  499. PopTip.show(text);
  500. dialog.setMenuList(new String[]{"test", "test2", "test3"});
  501. return false;
  502. }
  503. });
  504. }
  505. }
  506. });
  507. btnBottomReply.setOnClickListener(new View.OnClickListener() {
  508. @Override
  509. public void onClick(View v) {
  510. BottomDialog.show(new OnBindView<BottomDialog>(rdoDark.isChecked() ? R.layout.layout_custom_reply_dark : R.layout.layout_custom_reply) {
  511. @Override
  512. public void onBind(final BottomDialog dialog, View v) {
  513. btnReplyCommit = v.findViewById(R.id.btn_reply_commit);
  514. editReplyCommit = v.findViewById(R.id.edit_reply_commit);
  515. btnReplyCommit.setOnClickListener(new View.OnClickListener() {
  516. @Override
  517. public void onClick(View v) {
  518. dialog.dismiss();
  519. PopTip.show("提交内容:\n" + editReplyCommit.getText().toString());
  520. }
  521. });
  522. editReplyCommit.postDelayed(new Runnable() {
  523. @Override
  524. public void run() {
  525. showIME(editReplyCommit);
  526. }
  527. }, 300);
  528. }
  529. }).setAllowInterceptTouch(false);
  530. }
  531. });
  532. btnCustomMessageDialog.setOnClickListener(new View.OnClickListener() {
  533. @Override
  534. public void onClick(View v) {
  535. MessageDialog.show("这里是标题", "此对话框演示的是自定义对话框内部布局的效果", "确定", "取消")
  536. .setCustomView(new OnBindView<MessageDialog>(R.layout.layout_custom_view) {
  537. @Override
  538. public void onBind(MessageDialog dialog, View v) {
  539. }
  540. });
  541. }
  542. });
  543. btnCustomInputDialog.setOnClickListener(new View.OnClickListener() {
  544. @Override
  545. public void onClick(View v) {
  546. InputDialog.show("这里是标题", "此对话框演示的是自定义对话框内部布局的效果", "确定", "取消")
  547. .setCustomView(new OnBindView<MessageDialog>(R.layout.layout_custom_view) {
  548. @Override
  549. public void onBind(MessageDialog dialog, View v) {
  550. }
  551. });
  552. }
  553. });
  554. btnCustomBottomMenu.setOnClickListener(new View.OnClickListener() {
  555. @Override
  556. public void onClick(View v) {
  557. BottomMenu.show(new String[]{"新标签页中打开", "稍后阅读", "复制链接网址"})
  558. .setMessage("http://www.kongzue.com/DialogX")
  559. .setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  560. @Override
  561. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  562. PopTip.show(text);
  563. return false;
  564. }
  565. })
  566. .setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_view) {
  567. @Override
  568. public void onBind(BottomDialog dialog, View v) {
  569. }
  570. });
  571. }
  572. });
  573. btnShowBreak.setOnClickListener(new View.OnClickListener() {
  574. @Override
  575. public void onClick(View v) {
  576. jump(MainActivity.class, new JumpParameter().put("showBreak", true).put("fromActivity", getInstanceKey()));
  577. }
  578. });
  579. btnFullScreenDialogLogin.setOnClickListener(new View.OnClickListener() {
  580. /**
  581. * 采用异步加载布局防止卡顿测试
  582. */
  583. OnBindView<FullScreenDialog> onBindView;
  584. @Override
  585. public void onClick(View v) {
  586. onBindView = new OnBindView<FullScreenDialog>(R.layout.layout_full_login) {
  587. @Override
  588. public void onBind(FullScreenDialog dialog, View v) {
  589. btnCancel = v.findViewById(R.id.btn_cancel);
  590. btnSubmit = v.findViewById(R.id.btn_submit);
  591. boxUserName = v.findViewById(R.id.box_userName);
  592. editUserName = v.findViewById(R.id.edit_userName);
  593. boxPassword = v.findViewById(R.id.box_password);
  594. editPassword = v.findViewById(R.id.edit_password);
  595. initFullScreenLoginDemo(dialog);
  596. }
  597. };
  598. FullScreenDialog.show(onBindView);
  599. }
  600. });
  601. btnFullScreenDialogWebPage.setOnClickListener(new View.OnClickListener() {
  602. @Override
  603. public void onClick(View v) {
  604. FullScreenDialog.show(new OnBindView<FullScreenDialog>(R.layout.layout_full_webview) {
  605. @Override
  606. public void onBind(final FullScreenDialog dialog, View v) {
  607. btnClose = v.findViewById(R.id.btn_close);
  608. webView = v.findViewById(R.id.webView);
  609. btnClose.setOnClickListener(new View.OnClickListener() {
  610. @Override
  611. public void onClick(View v) {
  612. dialog.dismiss();
  613. }
  614. });
  615. WebSettings webSettings = webView.getSettings();
  616. webSettings.setJavaScriptEnabled(true);
  617. webSettings.setLoadWithOverviewMode(true);
  618. webSettings.setUseWideViewPort(true);
  619. webSettings.setSupportZoom(false);
  620. webSettings.setAllowFileAccess(true);
  621. webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
  622. webSettings.setLoadsImagesAutomatically(true);
  623. webSettings.setDefaultTextEncodingName("utf-8");
  624. webView.setWebViewClient(new WebViewClient() {
  625. @Override
  626. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  627. try {
  628. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
  629. startActivity(intent);
  630. } catch (ActivityNotFoundException e) {
  631. e.printStackTrace();
  632. }
  633. return true;
  634. }
  635. @Override
  636. public void onPageFinished(WebView view, String url) {
  637. super.onPageFinished(view, url);
  638. }
  639. });
  640. webView.loadUrl("https://www.kongzue.com/");
  641. }
  642. });
  643. }
  644. });
  645. btnCustomDialog.setOnClickListener(new View.OnClickListener() {
  646. @Override
  647. public void onClick(View v) {
  648. CustomDialog.show(new OnBindView<CustomDialog>(R.layout.layout_custom_dialog) {
  649. @Override
  650. public void onBind(final CustomDialog dialog, View v) {
  651. ImageView btnOk;
  652. btnOk = v.findViewById(R.id.btn_ok);
  653. btnOk.setOnClickListener(new View.OnClickListener() {
  654. @Override
  655. public void onClick(View v) {
  656. dialog.dismiss();
  657. }
  658. });
  659. }
  660. })
  661. .setMaskColor(getResources().getColor(R.color.black30));
  662. }
  663. });
  664. btnPoptip.setOnClickListener(new View.OnClickListener() {
  665. @Override
  666. public void onClick(View v) {
  667. PopTip.show("这是一个提示");
  668. }
  669. });
  670. btnPoptipBigMessage.setOnClickListener(new View.OnClickListener() {
  671. @Override
  672. public void onClick(View v) {
  673. if (rdoIos.isChecked()) {
  674. PopTip.show(R.mipmap.img_air_pods_pro, "AirPods Pro 已连接").setAutoTintIconInLightOrDarkMode(false).showLong();
  675. } else {
  676. PopTip.show(R.mipmap.img_mail_line_white, "邮件已发送", "撤回").setButton(new OnDialogButtonClickListener<PopTip>() {
  677. @Override
  678. public boolean onClick(PopTip popTip, View v) {
  679. //点击“撤回”按钮回调
  680. toast("邮件已撤回");
  681. return false;
  682. }
  683. }).showLong();
  684. }
  685. }
  686. });
  687. btnBottomSelectMenu.setOnClickListener(new View.OnClickListener() {
  688. @Override
  689. public void onClick(View v) {
  690. BottomMenu.show(singleSelectMenuText)
  691. .setMessage("这里是权限确认的文本说明,这是一个演示菜单")
  692. .setTitle("获得权限标题")
  693. .setOnMenuItemClickListener(new OnMenuItemSelectListener<BottomMenu>() {
  694. @Override
  695. public void onOneItemSelect(BottomMenu dialog, CharSequence text, int index, boolean select) {
  696. selectMenuIndex = index;
  697. }
  698. })
  699. .setCancelButton("确定", new OnDialogButtonClickListener<BottomDialog>() {
  700. @Override
  701. public boolean onClick(BottomDialog baseDialog, View v) {
  702. PopTip.show("已选择:" + singleSelectMenuText[selectMenuIndex]);
  703. return false;
  704. }
  705. })
  706. .setSelection(selectMenuIndex);
  707. }
  708. });
  709. btnBottomMultiSelectMenu.setOnClickListener(new View.OnClickListener() {
  710. @Override
  711. public void onClick(View v) {
  712. BottomMenu.show(multiSelectMenuText)
  713. .setMessage("这里是权限确认的文本说明,这是一个演示菜单")
  714. .setTitle("获得权限标题")
  715. .setOnMenuItemClickListener(new OnMenuItemSelectListener<BottomMenu>() {
  716. @Override
  717. public void onMultiItemSelect(BottomMenu dialog, CharSequence[] text, int[] index) {
  718. multiSelectMenuResultCache = "";
  719. for (CharSequence c : text) {
  720. multiSelectMenuResultCache = multiSelectMenuResultCache + " " + c;
  721. }
  722. selectMenuIndexArray = index;
  723. }
  724. })
  725. .setCancelButton("确定", new OnDialogButtonClickListener<BottomDialog>() {
  726. @Override
  727. public boolean onClick(BottomDialog baseDialog, View v) {
  728. PopTip.show("已选择:" + multiSelectMenuResultCache);
  729. return false;
  730. }
  731. })
  732. .setSelection(selectMenuIndexArray);
  733. }
  734. });
  735. btnBottomCustomRecycleView.setOnClickListener(new View.OnClickListener() {
  736. @Override
  737. public void onClick(View v) {
  738. BottomDialog.build()
  739. .setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_recycleview) {
  740. @Override
  741. public void onBind(BottomDialog dialog, View v) {
  742. List<CustomRecycleViewAdapter.Data> fruitList = new ArrayList<>();
  743. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 1"));
  744. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 2"));
  745. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 3"));
  746. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 4"));
  747. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 5"));
  748. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 6"));
  749. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 7"));
  750. fruitList.add(new CustomRecycleViewAdapter.Data("Item Text 8"));
  751. RecyclerView recyclerView = (RecyclerView) v;
  752. LinearLayoutManager layoutManager = new LinearLayoutManager(me);
  753. recyclerView.setLayoutManager(layoutManager);
  754. CustomRecycleViewAdapter adapter = new CustomRecycleViewAdapter(fruitList);
  755. recyclerView.setAdapter(adapter);
  756. }
  757. })
  758. .show();
  759. }
  760. });
  761. }
  762. private void initFullScreenLoginDemo(final FullScreenDialog fullScreenDialog) {
  763. btnCancel.setOnClickListener(new View.OnClickListener() {
  764. @Override
  765. public void onClick(View v) {
  766. fullScreenDialog.dismiss();
  767. }
  768. });
  769. btnCancel.setText("取消");
  770. btnSubmit.setText("下一步");
  771. btnSubmit.setOnClickListener(new View.OnClickListener() {
  772. @Override
  773. public void onClick(View v) {
  774. if (isNull(editUserName.getText().toString().trim())) {
  775. hideIME(null);
  776. TipDialog.show("请输入账号", TipDialog.TYPE.WARNING);
  777. return;
  778. }
  779. boxUserName.animate().x(-getDisplayWidth()).setDuration(300);
  780. boxPassword.setX(getDisplayWidth());
  781. boxPassword.setVisibility(View.VISIBLE);
  782. boxPassword.animate().x(0).setDuration(300);
  783. editPassword.setFocusable(true);
  784. editPassword.requestFocus();
  785. btnCancel.setText("上一步");
  786. btnCancel.setOnClickListener(new View.OnClickListener() {
  787. @Override
  788. public void onClick(View v) {
  789. boxUserName.animate().x(0).setDuration(300);
  790. boxPassword.animate().x(getDisplayWidth()).setDuration(300);
  791. editUserName.setFocusable(true);
  792. editUserName.requestFocus();
  793. initFullScreenLoginDemo(fullScreenDialog);
  794. }
  795. });
  796. btnSubmit.setText("登录");
  797. btnSubmit.setOnClickListener(new View.OnClickListener() {
  798. @Override
  799. public void onClick(View v) {
  800. hideIME(null);
  801. if (isNull(editPassword.getText().toString().trim())) {
  802. TipDialog.show("请输入密码", TipDialog.TYPE.WARNING);
  803. return;
  804. }
  805. WaitDialog.show("登录中...");
  806. runOnMainDelayed(new Runnable() {
  807. @Override
  808. public void run() {
  809. TipDialog.show("登录成功", TipDialog.TYPE.SUCCESS).setDialogLifecycleCallback(new DialogLifecycleCallback<WaitDialog>() {
  810. @Override
  811. public void onDismiss(WaitDialog dialog) {
  812. fullScreenDialog.dismiss();
  813. }
  814. });
  815. }
  816. }, 2000);
  817. }
  818. });
  819. }
  820. });
  821. }
  822. @Override
  823. public void onBackPressed() {
  824. log("#MainActivity.onBackPressed");
  825. super.onBackPressed();
  826. }
  827. public void showIME(EditText editText) {
  828. if (editText == null) {
  829. return;
  830. }
  831. editText.requestFocus();
  832. editText.setFocusableInTouchMode(true);
  833. InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  834. imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
  835. }
  836. @Override
  837. public void onConfigurationChanged(@NonNull Configuration newConfig) {
  838. super.onConfigurationChanged(newConfig);
  839. refreshUIMode();
  840. }
  841. /**
  842. * 刷新亮暗色模式界面变化
  843. */
  844. private void refreshUIMode() {
  845. if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO) {
  846. setDarkStatusBarTheme(true);
  847. } else {
  848. setDarkStatusBarTheme(false);
  849. }
  850. }
  851. }