MainActivity.java 74 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544
  1. package com.kongzue.dialogxdemo.activity;
  2. import static com.kongzue.dialogx.dialogs.PopTip.tip;
  3. import android.animation.ValueAnimator;
  4. import android.content.ActivityNotFoundException;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.res.ColorStateList;
  8. import android.content.res.Configuration;
  9. import android.graphics.Bitmap;
  10. import android.graphics.BitmapFactory;
  11. import android.graphics.Color;
  12. import android.graphics.Rect;
  13. import android.net.Uri;
  14. import android.os.Build;
  15. import android.os.Bundle;
  16. import android.os.Handler;
  17. import android.os.Looper;
  18. import android.provider.Settings;
  19. import android.text.InputType;
  20. import android.view.Gravity;
  21. import android.view.MotionEvent;
  22. import android.view.View;
  23. import android.view.ViewGroup;
  24. import android.view.WindowInsets;
  25. import android.view.WindowManager;
  26. import android.view.inputmethod.InputMethodManager;
  27. import android.webkit.WebSettings;
  28. import android.webkit.WebView;
  29. import android.webkit.WebViewClient;
  30. import android.widget.AdapterView;
  31. import android.widget.EditText;
  32. import android.widget.FrameLayout;
  33. import android.widget.ImageView;
  34. import android.widget.LinearLayout;
  35. import android.widget.RelativeLayout;
  36. import android.widget.TextView;
  37. import android.widget.Toast;
  38. import androidx.annotation.NonNull;
  39. import androidx.appcompat.app.AppCompatDelegate;
  40. import androidx.constraintlayout.widget.ConstraintLayout;
  41. import androidx.recyclerview.widget.LinearLayoutManager;
  42. import androidx.recyclerview.widget.RecyclerView;
  43. import com.google.android.material.button.MaterialButton;
  44. import com.google.android.material.button.MaterialButtonToggleGroup;
  45. import com.kongzue.baseframework.BaseActivity;
  46. import com.kongzue.baseframework.interfaces.DarkNavigationBarTheme;
  47. import com.kongzue.baseframework.interfaces.DarkStatusBarTheme;
  48. import com.kongzue.baseframework.interfaces.Layout;
  49. import com.kongzue.baseframework.interfaces.NavigationBarBackgroundColorRes;
  50. import com.kongzue.baseframework.util.CycleRunner;
  51. import com.kongzue.baseframework.util.JumpParameter;
  52. import com.kongzue.dialogx.DialogX;
  53. import com.kongzue.dialogx.dialogs.BottomDialog;
  54. import com.kongzue.dialogx.dialogs.BottomMenu;
  55. import com.kongzue.dialogx.dialogs.CustomDialog;
  56. import com.kongzue.dialogx.dialogs.FullScreenDialog;
  57. import com.kongzue.dialogx.dialogs.GuideDialog;
  58. import com.kongzue.dialogx.dialogs.InputDialog;
  59. import com.kongzue.dialogx.dialogs.MessageDialog;
  60. import com.kongzue.dialogx.dialogs.MessageMenu;
  61. import com.kongzue.dialogx.dialogs.PopMenu;
  62. import com.kongzue.dialogx.dialogs.PopNotification;
  63. import com.kongzue.dialogx.dialogs.PopTip;
  64. import com.kongzue.dialogx.dialogs.TipDialog;
  65. import com.kongzue.dialogx.dialogs.WaitDialog;
  66. import com.kongzue.dialogx.interfaces.BaseDialog;
  67. import com.kongzue.dialogx.interfaces.BottomDialogSlideEventLifecycleCallback;
  68. import com.kongzue.dialogx.interfaces.DialogLifecycleCallback;
  69. import com.kongzue.dialogx.interfaces.DialogXAnimInterface;
  70. import com.kongzue.dialogx.interfaces.DialogXRunnable;
  71. import com.kongzue.dialogx.interfaces.DialogXStyle;
  72. import com.kongzue.dialogx.interfaces.MenuItemTextInfoInterceptor;
  73. import com.kongzue.dialogx.interfaces.OnBackPressedListener;
  74. import com.kongzue.dialogx.interfaces.OnBackgroundMaskClickListener;
  75. import com.kongzue.dialogx.interfaces.OnBindView;
  76. import com.kongzue.dialogx.interfaces.OnBindingView;
  77. import com.kongzue.dialogx.interfaces.OnDialogButtonClickListener;
  78. import com.kongzue.dialogx.interfaces.OnIconChangeCallBack;
  79. import com.kongzue.dialogx.interfaces.OnInputDialogButtonClickListener;
  80. import com.kongzue.dialogx.interfaces.OnMenuButtonClickListener;
  81. import com.kongzue.dialogx.interfaces.OnMenuItemClickListener;
  82. import com.kongzue.dialogx.interfaces.OnMenuItemSelectListener;
  83. import com.kongzue.dialogx.interfaces.OnSafeInsetsChangeListener;
  84. import com.kongzue.dialogx.style.IOSStyle;
  85. import com.kongzue.dialogx.style.KongzueStyle;
  86. import com.kongzue.dialogx.style.MIUIStyle;
  87. import com.kongzue.dialogx.style.MaterialStyle;
  88. import com.kongzue.dialogx.util.InputInfo;
  89. import com.kongzue.dialogx.util.TextInfo;
  90. import com.kongzue.dialogx.util.WindowUtil;
  91. import com.kongzue.dialogxdemo.BuildConfig;
  92. import com.kongzue.dialogxdemo.R;
  93. import com.kongzue.dialogxdemo.custom.recycleview.CustomRecycleViewAdapter;
  94. import com.kongzue.dialogxdemo.fragment.CustomFragment;
  95. import com.kongzue.dialogxmaterialyou.style.MaterialYouStyle;
  96. import java.util.ArrayList;
  97. import java.util.List;
  98. import java.util.Random;
  99. @Layout(R.layout.activity_main)
  100. @DarkStatusBarTheme(true)
  101. @DarkNavigationBarTheme(true)
  102. @NavigationBarBackgroundColorRes(R.color.emptyNavBar)
  103. public class MainActivity extends BaseActivity {
  104. private ConstraintLayout boxTitle;
  105. private TextView txtTitle;
  106. private ImageView btnShare;
  107. private ImageView splitBody;
  108. private LinearLayout boxBody;
  109. private MaterialButtonToggleGroup grpStyle;
  110. private MaterialButton rdoMaterial;
  111. private MaterialButton rdoIos;
  112. private MaterialButton rdoKongzue;
  113. private MaterialButton rdoMiui;
  114. private MaterialButton rdoMaterialYou;
  115. private MaterialButtonToggleGroup grpTheme;
  116. private MaterialButton rdoAuto;
  117. private MaterialButton rdoLight;
  118. private MaterialButton rdoDark;
  119. private MaterialButtonToggleGroup grpMode;
  120. private MaterialButton rdoModeView;
  121. private MaterialButton rdoModeWindow;
  122. private MaterialButton rdoModeDialogFragment;
  123. private MaterialButton rdoModeFloatingActivity;
  124. private MaterialButton btnMessageDialog;
  125. private MaterialButton btnSelectDialog;
  126. private MaterialButton btnInputDialog;
  127. private MaterialButton btnSelectMessageMenu;
  128. private MaterialButton btnMutiSelectMessageMenu;
  129. private MaterialButton btnWaitDialog;
  130. private MaterialButton btnWaitAndTipDialog;
  131. private MaterialButton btnTipSuccess;
  132. private MaterialButton btnTipWarning;
  133. private MaterialButton btnTipError;
  134. private MaterialButton btnTipProgress;
  135. private MaterialButton btnPoptip;
  136. private MaterialButton btnPoptipBigMessage;
  137. private MaterialButton btnPoptipSuccess;
  138. private MaterialButton btnPoptipWarning;
  139. private MaterialButton btnPoptipError;
  140. private MaterialButton btnPopnotification;
  141. private MaterialButton btnPopnotificationBigMessage;
  142. private MaterialButton btnPopnotificationOverlay;
  143. private MaterialButton btnBottomDialog;
  144. private MaterialButton btnBottomMenu;
  145. private MaterialButton btnBottomReply;
  146. private MaterialButton btnBottomSelectMenu;
  147. private MaterialButton btnBottomMultiSelectMenu;
  148. private MaterialButton btnBottomCustomRecycleView;
  149. private MaterialButton btnCustomMessageDialog;
  150. private MaterialButton btnCustomInputDialog;
  151. private MaterialButton btnCustomBottomMenu;
  152. private MaterialButton btnCustomDialog;
  153. private MaterialButton btnCustomDialogAlign;
  154. private MaterialButton btnFullScreenDialogWebPage;
  155. private MaterialButton btnFullScreenDialogLogin;
  156. private MaterialButton btnFullScreenDialogFragment;
  157. private MaterialButton btnContextMenu;
  158. private TextView btnSelectMenu;
  159. private MaterialButton btnShowGuide;
  160. private MaterialButton btnShowGuideBaseView;
  161. private MaterialButton btnShowGuideBaseViewRectangle;
  162. private MaterialButton btnShowBreak;
  163. private MaterialButton btnListDialog;
  164. private TextView txtVer;
  165. @Override
  166. public void initViews() {
  167. boxTitle = findViewById(R.id.box_title);
  168. txtTitle = findViewById(R.id.txt_title);
  169. btnShare = findViewById(R.id.btn_share);
  170. splitBody = findViewById(R.id.split_body);
  171. boxBody = findViewById(R.id.box_body);
  172. grpStyle = findViewById(R.id.grp_style);
  173. rdoMaterial = findViewById(R.id.rdo_material);
  174. rdoIos = findViewById(R.id.rdo_ios);
  175. rdoKongzue = findViewById(R.id.rdo_kongzue);
  176. rdoMiui = findViewById(R.id.rdo_miui);
  177. rdoMaterialYou = findViewById(R.id.rdo_material_you);
  178. grpTheme = findViewById(R.id.grp_theme);
  179. rdoAuto = findViewById(R.id.rdo_auto);
  180. rdoLight = findViewById(R.id.rdo_light);
  181. rdoDark = findViewById(R.id.rdo_dark);
  182. grpMode = findViewById(R.id.grp_mode);
  183. rdoModeView = findViewById(R.id.rdo_mode_view);
  184. rdoModeWindow = findViewById(R.id.rdo_mode_window);
  185. rdoModeDialogFragment = findViewById(R.id.rdo_mode_dialogFragment);
  186. rdoModeFloatingActivity = findViewById(R.id.rdo_mode_floatingActivity);
  187. btnMessageDialog = findViewById(R.id.btn_messageDialog);
  188. btnSelectDialog = findViewById(R.id.btn_selectDialog);
  189. btnInputDialog = findViewById(R.id.btn_inputDialog);
  190. btnSelectMessageMenu = findViewById(R.id.btn_select_menu);
  191. btnMutiSelectMessageMenu = findViewById(R.id.btn_multiSelect_menu);
  192. btnWaitDialog = findViewById(R.id.btn_waitDialog);
  193. btnWaitAndTipDialog = findViewById(R.id.btn_waitAndTipDialog);
  194. btnTipSuccess = findViewById(R.id.btn_tipSuccess);
  195. btnTipWarning = findViewById(R.id.btn_tipWarning);
  196. btnTipError = findViewById(R.id.btn_tipError);
  197. btnTipProgress = findViewById(R.id.btn_tipProgress);
  198. btnPoptip = findViewById(R.id.btn_poptip);
  199. btnPoptipBigMessage = findViewById(R.id.btn_poptip_bigMessage);
  200. btnPoptipSuccess = findViewById(R.id.btn_poptip_success);
  201. btnPoptipWarning = findViewById(R.id.btn_poptip_warning);
  202. btnPoptipError = findViewById(R.id.btn_poptip_error);
  203. btnPopnotification = findViewById(R.id.btn_popnotification);
  204. btnPopnotificationBigMessage = findViewById(R.id.btn_popnotification_bigMessage);
  205. btnPopnotificationOverlay = findViewById(R.id.btn_popnotification_overlay);
  206. btnBottomDialog = findViewById(R.id.btn_bottom_dialog);
  207. btnBottomMenu = findViewById(R.id.btn_bottom_menu);
  208. btnBottomReply = findViewById(R.id.btn_bottom_reply);
  209. btnBottomSelectMenu = findViewById(R.id.btn_bottom_select_menu);
  210. btnBottomMultiSelectMenu = findViewById(R.id.btn_bottom_multiSelect_menu);
  211. btnBottomCustomRecycleView = findViewById(R.id.btn_bottom_custom_recycleView);
  212. btnCustomMessageDialog = findViewById(R.id.btn_customMessageDialog);
  213. btnCustomInputDialog = findViewById(R.id.btn_customInputDialog);
  214. btnCustomBottomMenu = findViewById(R.id.btn_customBottomMenu);
  215. btnCustomDialog = findViewById(R.id.btn_customDialog);
  216. btnCustomDialogAlign = findViewById(R.id.btn_customDialogAlign);
  217. btnFullScreenDialogWebPage = findViewById(R.id.btn_fullScreenDialog_webPage);
  218. btnFullScreenDialogLogin = findViewById(R.id.btn_fullScreenDialog_login);
  219. btnFullScreenDialogFragment = findViewById(R.id.btn_fullScreenDialog_fragment);
  220. btnContextMenu = findViewById(R.id.btn_contextMenu);
  221. btnSelectMenu = findViewById(R.id.btn_selectMenu);
  222. btnShowGuide = findViewById(R.id.btn_showGuide);
  223. btnShowGuideBaseView = findViewById(R.id.btn_showGuideBaseView);
  224. btnShowGuideBaseViewRectangle = findViewById(R.id.btn_showGuideBaseViewRectangle);
  225. btnShowBreak = findViewById(R.id.btn_showBreak);
  226. btnListDialog = findViewById(R.id.btn_listDialog);
  227. txtVer = findViewById(R.id.txt_ver);
  228. }
  229. @Override
  230. public void initDatas(JumpParameter parameter) {
  231. getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
  232. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
  233. getWindow().getDecorView().setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
  234. @Override
  235. public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
  236. boxTitle.setPadding(0, insets.getSystemWindowInsetTop(), 0, 0);
  237. boxBody.setPadding(dip2px(15), dip2px(15), dip2px(15), insets.getSystemWindowInsetBottom() + dip2px(250));
  238. return insets;
  239. }
  240. });
  241. } else {
  242. getRootView().setFitsSystemWindows(true);
  243. }
  244. refreshUIMode();
  245. boolean showBreak = parameter.getBoolean("showBreak");
  246. if (showBreak) {
  247. txtTitle.setText("显示Dialog时关闭Activity演示");
  248. MessageDialog.show("提示", "接下来会直接运行一个 WaitDialog,2 秒后直接关闭 Activity,并回到原 Activity,保证程序不会出现 WindowLeaked 错误。\n\n" + "Android 原生 AlertDialog 常出现因 Activity 先于 Dialog 关闭而导致此错误引发程序崩溃。\n\n" + "而使用 DialogX 构建的对话框不仅仅不会出现此问题,还可避免因句柄持续持有导致的内存泄漏。", "开始测试", "取消").setOkButton(new OnDialogButtonClickListener() {
  249. @Override
  250. public boolean onClick(BaseDialog baseDialog, View v) {
  251. WaitDialog.show("请稍后...");
  252. runDelayed(new Runnable() {
  253. @Override
  254. public void run() {
  255. finish(); //先结束掉本界面
  256. }
  257. }, 2000);
  258. return false;
  259. }
  260. }).setCancelButton(new OnDialogButtonClickListener() {
  261. @Override
  262. public boolean onClick(BaseDialog baseDialog, View v) {
  263. finish();
  264. return false;
  265. }
  266. }).setCancelable(false);
  267. }
  268. switch (DialogX.implIMPLMode) {
  269. case VIEW:
  270. rdoModeView.setChecked(true);
  271. break;
  272. case WINDOW:
  273. rdoModeWindow.setChecked(true);
  274. break;
  275. case DIALOG_FRAGMENT:
  276. rdoModeDialogFragment.setChecked(true);
  277. break;
  278. case FLOATING_ACTIVITY:
  279. rdoModeFloatingActivity.setChecked(true);
  280. break;
  281. }
  282. txtVer.setText("当前版本:" + BuildConfig.VERSION_NAME);
  283. // //合并处理演示,在 onDismiss 中获取用户选择进行统一处理,以防止编写大量可能在不同选择下都要处理的重复代码
  284. // MessageDialog.show("Title", "Ask Question", "OK", "NO", "OTHER").setDialogLifecycleCallback(new DialogLifecycleCallback<MessageDialog>() {
  285. // @Override
  286. // public void onDismiss(MessageDialog dialog) {
  287. // /**
  288. // * dialog.getButtonSelectResult() 支持 MessageDialog 和 BottomDialog
  289. // * 两种具有选择功能的对话框。
  290. // * 包含四种状态:
  291. // * NONE, //未做出选择
  292. // * BUTTON_OK, //选择了确定按钮
  293. // * BUTTON_CANCEL, //选择了取消按钮
  294. // * BUTTON_OTHER //选择了其他按钮
  295. // */
  296. // if (dialog.getButtonSelectResult() == BaseDialog.BUTTON_SELECT_RESULT.BUTTON_OK) {
  297. // MessageDialog.show("Title", "You Select OK Button!", "OK");
  298. // } else {
  299. // TipDialog.show("Other Select!", WaitDialog.TYPE.WARNING);
  300. // }
  301. // }
  302. // });
  303. // //复写事件演示
  304. // new MessageDialog() {
  305. // @Override
  306. // public void onShow(MessageDialog dialog) {
  307. // //...
  308. // tip("onShow");
  309. // }
  310. //
  311. // @Override
  312. // public void onDismiss(MessageDialog dialog) {
  313. // WaitDialog.show("Please Wait...");
  314. // if (dialog.getButtonSelectResult() == BUTTON_SELECT_RESULT.BUTTON_OK) {
  315. // //点击了OK的情况
  316. // //...
  317. // } else {
  318. // //其他按钮点击、对话框dismiss的情况
  319. // //...
  320. // }
  321. // tip("onDismiss");
  322. // }
  323. // }
  324. // .setTitle("Title")
  325. // .setMessage("message")
  326. // .setOkButton("OK")
  327. // .setCancelButton("Cancel")
  328. // .show();
  329. }
  330. //用于模拟进度提示
  331. private CycleRunner cycleRunner;
  332. private float progress = 0;
  333. private int waitId;
  334. private TextView btnReplyCommit;
  335. private EditText editReplyCommit;
  336. private TextView btnCancel;
  337. private TextView btnSubmit;
  338. private RelativeLayout boxUserName;
  339. private EditText editUserName;
  340. private RelativeLayout boxPassword;
  341. private EditText editPassword;
  342. private TextView btnLicense;
  343. private TextView btnClose;
  344. private WebView webView;
  345. private String[] singleSelectMenuText = new String[]{"拒绝", "询问", "始终允许", "仅在使用中允许"};
  346. private int selectMenuIndex;
  347. private String[] multiSelectMenuText = new String[]{"上海", "北京", "广州", "深圳"};
  348. private int[] selectMenuIndexArray;
  349. private String multiSelectMenuResultCache;
  350. @Override
  351. public void setEvents() {
  352. grpMode.addOnButtonCheckedListener(new MaterialButtonToggleGroup.OnButtonCheckedListener() {
  353. @Override
  354. public void onButtonChecked(MaterialButtonToggleGroup group, int checkedId, boolean isChecked) {
  355. BaseDialog.cleanAll();
  356. switch (checkedId) {
  357. case R.id.rdo_mode_view:
  358. DialogX.implIMPLMode = DialogX.IMPL_MODE.VIEW;
  359. break;
  360. case R.id.rdo_mode_window:
  361. DialogX.implIMPLMode = DialogX.IMPL_MODE.WINDOW;
  362. break;
  363. case R.id.rdo_mode_dialogFragment:
  364. DialogX.implIMPLMode = DialogX.IMPL_MODE.DIALOG_FRAGMENT;
  365. break;
  366. case R.id.rdo_mode_floatingActivity:
  367. DialogX.implIMPLMode = DialogX.IMPL_MODE.FLOATING_ACTIVITY;
  368. break;
  369. }
  370. }
  371. });
  372. grpTheme.addOnButtonCheckedListener(new MaterialButtonToggleGroup.OnButtonCheckedListener() {
  373. @Override
  374. public void onButtonChecked(MaterialButtonToggleGroup group, int checkedId, boolean isChecked) {
  375. switch (checkedId) {
  376. case R.id.rdo_auto:
  377. DialogX.globalTheme = DialogX.THEME.AUTO;
  378. break;
  379. case R.id.rdo_light:
  380. DialogX.globalTheme = DialogX.THEME.LIGHT;
  381. break;
  382. case R.id.rdo_dark:
  383. DialogX.globalTheme = DialogX.THEME.DARK;
  384. break;
  385. }
  386. }
  387. });
  388. grpStyle.addOnButtonCheckedListener(new MaterialButtonToggleGroup.OnButtonCheckedListener() {
  389. @Override
  390. public void onButtonChecked(MaterialButtonToggleGroup group, int checkedId, boolean isChecked) {
  391. DialogX.cancelButtonText = "取消";
  392. DialogX.titleTextInfo = null;
  393. DialogX.buttonTextInfo = null;
  394. switch (checkedId) {
  395. case R.id.rdo_material:
  396. DialogX.globalStyle = MaterialStyle.style();
  397. DialogX.cancelButtonText = "";
  398. break;
  399. case R.id.rdo_kongzue:
  400. DialogX.globalStyle = KongzueStyle.style();
  401. break;
  402. case R.id.rdo_ios:
  403. DialogX.globalStyle = IOSStyle.style();
  404. break;
  405. case R.id.rdo_miui:
  406. DialogX.globalStyle = MIUIStyle.style();
  407. break;
  408. case R.id.rdo_material_you:
  409. DialogX.globalStyle = MaterialYouStyle.style();
  410. break;
  411. }
  412. }
  413. });
  414. btnShare.setOnClickListener(new View.OnClickListener() {
  415. @Override
  416. public void onClick(View v) {
  417. openUrl("https://github.com/kongzue/DialogX");
  418. }
  419. });
  420. btnContextMenu.setOnClickListener(new View.OnClickListener() {
  421. @Override
  422. public void onClick(View v) {
  423. PopMenu.show("添加", "编辑", "删除", "分享").disableMenu("编辑", "删除").setIconResIds(R.mipmap.img_dialogx_demo_add, R.mipmap.img_dialogx_demo_edit, R.mipmap.img_dialogx_demo_delete, R.mipmap.img_dialogx_demo_share).setOnMenuItemClickListener(new OnMenuItemClickListener<PopMenu>() {
  424. @Override
  425. public boolean onClick(PopMenu dialog, CharSequence text, int index) {
  426. if (index == 0) {
  427. dialog.setMenuList(new String[]{"产品A", "产品B", "产品C"});
  428. return true;
  429. }
  430. return false;
  431. }
  432. });
  433. }
  434. });
  435. btnSelectMenu.setOnClickListener(new View.OnClickListener() {
  436. @Override
  437. public void onClick(View view) {
  438. PopMenu.show(view, new String[]{"选项1", "选项2", "选项3"}).setOnMenuItemClickListener(new OnMenuItemClickListener<PopMenu>() {
  439. @Override
  440. public boolean onClick(PopMenu dialog, CharSequence text, int index) {
  441. btnSelectMenu.setText(text);
  442. return false;
  443. }
  444. });
  445. }
  446. });
  447. btnFullScreenDialogFragment.setOnClickListener(new View.OnClickListener() {
  448. @Override
  449. public void onClick(View v) {
  450. CustomFragment customFragment = new CustomFragment().setAddButtonClickListener(new View.OnClickListener() {
  451. @Override
  452. public void onClick(View v) {
  453. btnFullScreenDialogFragment.callOnClick();
  454. }
  455. });
  456. FullScreenDialog.build(new OnBindView<FullScreenDialog>(customFragment) {
  457. @Override
  458. public void onBind(FullScreenDialog dialog, View v) {
  459. }
  460. }).hideActivityContentView(true).show();
  461. }
  462. });
  463. btnMessageDialog.setOnClickListener(new View.OnClickListener() {
  464. @Override
  465. public void onClick(View view) {
  466. MessageDialog.show("标题", "这里是正文内容。", "确定").onShow(new DialogXRunnable<MessageDialog>() {
  467. @Override
  468. public void run(MessageDialog dialog) {
  469. tip("onShow");
  470. }
  471. }).onDismiss(new DialogXRunnable<MessageDialog>() {
  472. @Override
  473. public void run(MessageDialog dialog) {
  474. tip("onDismiss");
  475. }
  476. }).setTitleIcon(R.mipmap.img_demo_avatar).setOkButton(new OnDialogButtonClickListener<MessageDialog>() {
  477. @Override
  478. public boolean onClick(MessageDialog baseDialog, View v) {
  479. PopTip.show("点击确定按钮");
  480. return false;
  481. }
  482. });
  483. }
  484. });
  485. btnSelectDialog.setOnClickListener(new View.OnClickListener() {
  486. @Override
  487. public void onClick(View v) {
  488. MessageDialog messageDialog = new MessageDialog("多选对话框", "移除App会将它从主屏幕移除并保留其所有数据。", "删除App", "取消", "移至App资源库").setButtonOrientation(LinearLayout.VERTICAL);
  489. if (!rdoMiui.isChecked()) {
  490. messageDialog.setOkTextInfo(new TextInfo().setFontColor(Color.parseColor("#EB5545")).setBold(true));
  491. }
  492. messageDialog.show();
  493. }
  494. });
  495. btnInputDialog.setOnClickListener(new View.OnClickListener() {
  496. @Override
  497. public void onClick(View view) {
  498. new InputDialog("标题", "正文内容", "确定", "取消", "正在输入的文字").setInputText("Hello World").setOkButton(new OnInputDialogButtonClickListener<InputDialog>() {
  499. @Override
  500. public boolean onClick(InputDialog baseDialog, View v, String inputStr) {
  501. PopTip.show("输入的内容:" + inputStr);
  502. return false;
  503. }
  504. }).show();
  505. }
  506. });
  507. btnSelectMessageMenu.setOnClickListener(new View.OnClickListener() {
  508. @Override
  509. public void onClick(View view) {
  510. MessageMenu.show(singleSelectMenuText).setShowSelectedBackgroundTips(rdoMiui.isChecked()).setMessage("这里是权限确认的文本说明,这是一个演示菜单").setTitle("获得权限标题").setOnMenuItemClickListener(new OnMenuItemSelectListener<MessageMenu>() {
  511. @Override
  512. public void onOneItemSelect(MessageMenu dialog, CharSequence text, int index, boolean select) {
  513. selectMenuIndex = index;
  514. }
  515. }).setCancelButton("确定", new OnMenuButtonClickListener<MessageMenu>() {
  516. @Override
  517. public boolean onClick(MessageMenu baseDialog, View v) {
  518. PopTip.show("已选择:" + singleSelectMenuText[selectMenuIndex]);
  519. return false;
  520. }
  521. }).setSelection(selectMenuIndex);
  522. }
  523. });
  524. btnMutiSelectMessageMenu.setOnClickListener(new View.OnClickListener() {
  525. @Override
  526. public void onClick(View v) {
  527. MessageMenu.show(multiSelectMenuText).setMessage("这里是选择城市的模拟范例,这是一个演示菜单").setTitle("请选择城市").setOnMenuItemClickListener(new OnMenuItemSelectListener<MessageMenu>() {
  528. @Override
  529. public void onMultiItemSelect(MessageMenu dialog, CharSequence[] text, int[] index) {
  530. multiSelectMenuResultCache = "";
  531. for (CharSequence c : text) {
  532. multiSelectMenuResultCache = multiSelectMenuResultCache + " " + c;
  533. }
  534. selectMenuIndexArray = index;
  535. }
  536. }).setOkButton("确定", new OnMenuButtonClickListener<MessageMenu>() {
  537. @Override
  538. public boolean onClick(MessageMenu dialog, View v) {
  539. PopTip.show("已选择:" + multiSelectMenuResultCache);
  540. return false;
  541. }
  542. })
  543. // .setCancelButton("确定", new OnDialogButtonClickListener<MessageDialog>() {
  544. // @Override
  545. // public boolean onClick(MessageDialog baseDialog, View v) {
  546. // PopTip.show("已选择:" + multiSelectMenuResultCache);
  547. // return false;
  548. // }
  549. // })
  550. .setSelection(selectMenuIndexArray);
  551. }
  552. });
  553. btnWaitDialog.setOnClickListener(new View.OnClickListener() {
  554. @Override
  555. public void onClick(View v) {
  556. WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener<WaitDialog>() {
  557. @Override
  558. public boolean onBackPressed(WaitDialog dialog) {
  559. PopTip.show("按下返回").setButton("取消", new OnDialogButtonClickListener<PopTip>() {
  560. @Override
  561. public boolean onClick(PopTip dialog, View v) {
  562. WaitDialog.dismiss();
  563. return false;
  564. }
  565. });
  566. return false;
  567. }
  568. });
  569. WaitDialog.dismiss(3000);
  570. }
  571. });
  572. btnWaitAndTipDialog.setOnClickListener(new View.OnClickListener() {
  573. boolean closeFlag = false;
  574. @Override
  575. public void onClick(View v) {
  576. closeFlag = false;
  577. WaitDialog.show("Please Wait!").setOnBackPressedListener(new OnBackPressedListener<WaitDialog>() {
  578. @Override
  579. public boolean onBackPressed(WaitDialog dialog) {
  580. PopTip.show("按下返回", "关闭").setButton(new OnDialogButtonClickListener<PopTip>() {
  581. @Override
  582. public boolean onClick(PopTip baseDialog, View v) {
  583. closeFlag = true;
  584. WaitDialog.dismiss();
  585. return false;
  586. }
  587. });
  588. return false;
  589. }
  590. }).setMinWidth(dip2px(200));
  591. if (!closeFlag) runDelayed(new Runnable() {
  592. @Override
  593. public void run() {
  594. if (!closeFlag) TipDialog.show("完成!", WaitDialog.TYPE.SUCCESS);
  595. }
  596. }, 1500 + new Random().nextInt(1000));
  597. }
  598. });
  599. btnTipSuccess.setOnClickListener(new View.OnClickListener() {
  600. @Override
  601. public void onClick(View v) {
  602. TipDialog.show("Success!", WaitDialog.TYPE.SUCCESS);
  603. }
  604. });
  605. btnTipWarning.setOnClickListener(new View.OnClickListener() {
  606. @Override
  607. public void onClick(View v) {
  608. TipDialog.show("Warning!", WaitDialog.TYPE.WARNING);
  609. }
  610. });
  611. btnTipError.setOnClickListener(new View.OnClickListener() {
  612. @Override
  613. public void onClick(View v) {
  614. TipDialog.show("Error!", WaitDialog.TYPE.ERROR);
  615. }
  616. });
  617. btnTipProgress.setOnClickListener(new View.OnClickListener() {
  618. @Override
  619. public void onClick(View v) {
  620. waitId = 0;
  621. progress = 0;
  622. WaitDialog.show("假装连接...").setOnBackPressedListener(new OnBackPressedListener<WaitDialog>() {
  623. @Override
  624. public boolean onBackPressed(WaitDialog dialog) {
  625. MessageDialog.show("正在进行", "是否取消?", "是", "否").setOkButton(new OnDialogButtonClickListener() {
  626. @Override
  627. public boolean onClick(BaseDialog baseDialog, View v) {
  628. waitId = -1;
  629. if (cycleRunner != null) {
  630. cycleRunner.cancel();
  631. }
  632. WaitDialog.dismiss();
  633. return false;
  634. }
  635. });
  636. return false;
  637. }
  638. });
  639. runOnMainDelayed(new Runnable() {
  640. @Override
  641. public void run() {
  642. if (waitId != 0) {
  643. return;
  644. }
  645. cycleRunner = runOnMainCycle(new Runnable() {
  646. @Override
  647. public void run() {
  648. if (waitId != 0) {
  649. cycleRunner.cancel();
  650. return;
  651. }
  652. progress = progress + 0.1f;
  653. if (progress < 1f) {
  654. WaitDialog.show("假装加载" + ((int) (progress * 100)) + "%", progress);
  655. } else {
  656. TipDialog.show("加载完成", WaitDialog.TYPE.SUCCESS);
  657. cycleRunner.cancel();
  658. }
  659. }
  660. }, 1000, 1000);
  661. }
  662. }, 3000);
  663. }
  664. });
  665. btnBottomDialog.setOnClickListener(new View.OnClickListener() {
  666. @Override
  667. public void onClick(View v) {
  668. String s = rdoMaterial.isChecked() ? "你可以向下滑动来关闭这个对话框" : "你可以点击空白区域或返回键来关闭这个对话框";
  669. new BottomDialog("标题", "这里是对话框内容。\n" + s + "。\n底部对话框也支持自定义布局扩展使用方式。", new OnBindView<BottomDialog>(R.layout.layout_custom_view) {
  670. @Override
  671. public void onBind(BottomDialog dialog, View v) {
  672. v.setOnClickListener(new View.OnClickListener() {
  673. @Override
  674. public void onClick(View v) {
  675. dialog.dismiss();
  676. PopTip.show("Click Custom View");
  677. }
  678. });
  679. }
  680. }).setDialogLifecycleCallback(new BottomDialogSlideEventLifecycleCallback<BottomDialog>() {
  681. @Override
  682. public boolean onSlideClose(BottomDialog dialog) {
  683. log("#onSlideClose");
  684. return super.onSlideClose(dialog);
  685. }
  686. @Override
  687. public boolean onSlideTouchEvent(BottomDialog dialog, View v, MotionEvent event) {
  688. log("#onSlideTouchEvent: action=" + event.getAction() + " y=" + event.getY());
  689. return super.onSlideTouchEvent(dialog, v, event);
  690. }
  691. }).show();
  692. }
  693. });
  694. btnBottomMenu.setOnClickListener(new View.OnClickListener() {
  695. @Override
  696. public void onClick(View v) {
  697. if (rdoMaterial.isChecked()) {
  698. //Material 可滑动展开 BottomMenu 演示
  699. BottomMenu.build()
  700. .setBottomDialogMaxHeight(0.6f)
  701. .setMenuList(new String[]{"添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐", "添加", "查看", "编辑", "删除", "分享", "评论", "下载", "收藏", "赞!", "不喜欢", "所属专辑", "复制链接", "类似推荐"}).setOnIconChangeCallBack(new OnIconChangeCallBack<BottomMenu>(true) {
  702. @Override
  703. public int getIcon(BottomMenu bottomMenu, int index, String menuText) {
  704. switch (menuText) {
  705. case "添加":
  706. return R.mipmap.img_dialogx_demo_add;
  707. case "查看":
  708. return R.mipmap.img_dialogx_demo_view;
  709. case "编辑":
  710. return R.mipmap.img_dialogx_demo_edit;
  711. case "删除":
  712. return R.mipmap.img_dialogx_demo_delete;
  713. case "分享":
  714. return R.mipmap.img_dialogx_demo_share;
  715. case "评论":
  716. return R.mipmap.img_dialogx_demo_comment;
  717. case "下载":
  718. return R.mipmap.img_dialogx_demo_download;
  719. case "收藏":
  720. return R.mipmap.img_dialogx_demo_favorite;
  721. case "赞!":
  722. return R.mipmap.img_dialogx_demo_good;
  723. case "不喜欢":
  724. return R.mipmap.img_dialogx_demo_dislike;
  725. case "所属专辑":
  726. return R.mipmap.img_dialogx_demo_album;
  727. case "复制链接":
  728. return R.mipmap.img_dialogx_demo_link;
  729. case "类似推荐":
  730. return R.mipmap.img_dialogx_demo_recommend;
  731. }
  732. return 0;
  733. }
  734. }).setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  735. @Override
  736. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  737. PopTip.show(text);
  738. return false;
  739. }
  740. }).show();
  741. // 测试用代码
  742. // BottomMenu.show("添加", "查看", "编辑")
  743. // .setIconResIds(R.mipmap.img_dialogx_demo_add,
  744. // R.mipmap.img_dialogx_demo_view,
  745. // R.mipmap.img_dialogx_demo_edit
  746. // );
  747. } else {
  748. BottomMenu.show(new String[]{"新标签页中打开", "稍后阅读", "复制链接网址"}).setMessage("http://www.kongzue.com/DialogX").setMenuItemTextInfoInterceptor(new MenuItemTextInfoInterceptor<BottomMenu>() {
  749. @Override
  750. public TextInfo menuItemTextInfo(BottomMenu dialog, int index, String menuText) {
  751. if (index == 2) {
  752. return new TextInfo().setFontColor(Color.RED).setBold(true);
  753. }
  754. return null;
  755. }
  756. }).setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  757. @Override
  758. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  759. log("点击了菜单:"+ index + " 文本:" + text);
  760. PopTip.show(text);
  761. try {
  762. throw new RuntimeException("test");
  763. }catch (Exception e) {
  764. e.printStackTrace();
  765. }
  766. return false;
  767. }
  768. }).setIconResIds(R.mipmap.img_dialogx_demo_add,R.mipmap.img_dialogx_demo_view,R.mipmap.img_dialogx_demo_link);
  769. }
  770. }
  771. });
  772. btnBottomReply.setOnClickListener(new View.OnClickListener() {
  773. @Override
  774. public void onClick(View v) {
  775. BottomDialog.show(new OnBindView<BottomDialog>(rdoDark.isChecked() ? R.layout.layout_custom_reply_dark : R.layout.layout_custom_reply) {
  776. @Override
  777. public void onBind(final BottomDialog dialog, View v) {
  778. btnReplyCommit = v.findViewById(R.id.btn_reply_commit);
  779. editReplyCommit = v.findViewById(R.id.edit_reply_commit);
  780. btnReplyCommit.setOnClickListener(new View.OnClickListener() {
  781. @Override
  782. public void onClick(View v) {
  783. dialog.dismiss();
  784. PopTip.show("提交内容:\n" + editReplyCommit.getText().toString());
  785. }
  786. });
  787. editReplyCommit.postDelayed(new Runnable() {
  788. @Override
  789. public void run() {
  790. showIME(editReplyCommit);
  791. }
  792. }, 300);
  793. }
  794. }).setAllowInterceptTouch(false);
  795. }
  796. });
  797. btnCustomMessageDialog.setOnClickListener(new View.OnClickListener() {
  798. @Override
  799. public void onClick(View v) {
  800. MessageDialog.show("这里是标题", "此对话框演示的是自定义对话框内部布局的效果", "确定", "取消").setDialogLifecycleCallback(new BottomDialogSlideEventLifecycleCallback<MessageDialog>() {
  801. @Override
  802. public void onShow(MessageDialog dialog) {
  803. super.onShow(dialog);
  804. dialog.getDialogImpl().txtDialogTip.setPadding(0, dip2px(20), 0, 0);
  805. }
  806. }).setCustomView(new OnBindView<MessageDialog>(R.layout.layout_custom_view) {
  807. @Override
  808. public void onBind(MessageDialog dialog, View v) {
  809. }
  810. }).setMaskColor(Color.TRANSPARENT);
  811. }
  812. });
  813. btnCustomInputDialog.setOnClickListener(new View.OnClickListener() {
  814. @Override
  815. public void onClick(View v) {
  816. InputDialog.show("这里是标题", "此对话框演示的是自定义对话框内部布局的效果", "确定", "取消").setCustomView(new OnBindView<MessageDialog>(R.layout.layout_custom_view) {
  817. @Override
  818. public void onBind(MessageDialog dialog, View v) {
  819. }
  820. });
  821. }
  822. });
  823. //仅使用渐变动画的实现示例
  824. DialogXAnimInterface<BottomDialog> alphaDialogAnimation = new DialogXAnimInterface<BottomDialog>() {
  825. @Override
  826. //入场动画
  827. public void doShowAnim(BottomDialog dialog, ViewGroup dialogBodyView) {
  828. //设置好位置,将默认预设会在屏幕底外部恢复为屏幕内
  829. dialog.getDialogImpl().boxBkg.setY(dialog.getDialogImpl().boxRoot.getUnsafePlace().top);
  830. //创建 0f~1f 的数值动画
  831. ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f);
  832. animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
  833. @Override
  834. public void onAnimationUpdate(ValueAnimator animation) {
  835. float value = (float) animation.getAnimatedValue();
  836. //修改背景遮罩透明度
  837. dialog.getDialogImpl().boxRoot.setBkgAlpha(value);
  838. //修改内容透明度
  839. dialog.getDialogImpl().bkg.setAlpha(value);
  840. }
  841. });
  842. //使用真正的动画时长
  843. animator.setDuration(dialog.getDialogImpl().getEnterAnimationDuration());
  844. animator.start();
  845. }
  846. @Override
  847. //出场动画
  848. public void doExitAnim(BottomDialog dialog, ViewGroup dialogBodyView) {
  849. ValueAnimator animator = ValueAnimator.ofFloat(1f, 0f);
  850. animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
  851. @Override
  852. public void onAnimationUpdate(ValueAnimator animation) {
  853. float value = (float) animation.getAnimatedValue();
  854. //这里可以直接修改整体透明度淡出
  855. dialog.getDialogImpl().boxRoot.setAlpha(value);
  856. }
  857. });
  858. animator.setDuration(dialog.getDialogImpl().getExitAnimationDuration());
  859. animator.start();
  860. }
  861. };
  862. btnCustomBottomMenu.setOnClickListener(new View.OnClickListener() {
  863. @Override
  864. public void onClick(View v) {
  865. BottomMenu.show(new String[]{"新标签页中打开", "稍后阅读", "复制链接网址"}).setMessage("http://www.kongzue.com/DialogX").setOnMenuItemClickListener(new OnMenuItemClickListener<BottomMenu>() {
  866. @Override
  867. public boolean onClick(BottomMenu dialog, CharSequence text, int index) {
  868. PopTip.show(text);
  869. return false;
  870. }
  871. })
  872. //.setDialogXAnimImpl(alphaDialogAnimation)
  873. .setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_view) {
  874. @Override
  875. public void onBind(BottomDialog dialog, View v) {
  876. }
  877. });
  878. }
  879. });
  880. btnShowGuide.setOnClickListener(new View.OnClickListener() {
  881. @Override
  882. public void onClick(View v) {
  883. GuideDialog.show(R.mipmap.img_guide_tip);
  884. }
  885. });
  886. btnShowGuideBaseView.setOnClickListener(new View.OnClickListener() {
  887. @Override
  888. public void onClick(View v) {
  889. GuideDialog.show(btnFullScreenDialogLogin, R.mipmap.img_tip_login).setBaseViewMarginTop(-dip2px(30));
  890. }
  891. });
  892. btnShowGuideBaseViewRectangle.setOnClickListener(new View.OnClickListener() {
  893. @Override
  894. public void onClick(View v) {
  895. GuideDialog.show(btnCustomDialogAlign, GuideDialog.STAGE_LIGHT_TYPE.RECTANGLE, R.mipmap.img_tip_login_clicktest).setStageLightFilletRadius(dip2px(5)).setBaseViewMarginTop(-dip2px(30)).setOnBackgroundMaskClickListener(new OnBackgroundMaskClickListener<CustomDialog>() {
  896. @Override
  897. public boolean onClick(CustomDialog dialog, View v) {
  898. toast("点击了外围遮罩");
  899. return false;
  900. }
  901. }).setOnStageLightPathClickListener(new OnDialogButtonClickListener<GuideDialog>() {
  902. @Override
  903. public boolean onClick(GuideDialog dialog, View v) {
  904. toast("点击了原按钮");
  905. btnCustomDialogAlign.callOnClick();
  906. return false;
  907. }
  908. });
  909. }
  910. });
  911. btnShowBreak.setOnClickListener(new View.OnClickListener() {
  912. @Override
  913. public void onClick(View v) {
  914. jump(MainActivity.class, new JumpParameter().put("showBreak", true).put("fromActivity", getInstanceKey()));
  915. }
  916. });
  917. btnListDialog.setOnClickListener(new View.OnClickListener() {
  918. @Override
  919. public void onClick(View v) {
  920. DialogX.showDialogList(MessageDialog.build().setTitle("提示").setMessage("这是一组消息对话框队列").setOkButton("开始").setCancelButton("取消").setCancelButton(new OnDialogButtonClickListener<MessageDialog>() {
  921. @Override
  922. public boolean onClick(MessageDialog dialog, View v) {
  923. dialog.cleanDialogList();
  924. return false;
  925. }
  926. }), PopTip.build().setMessage("每个对话框会依次显示"), PopNotification.build().setTitle("通知提示").setMessage("直到上一个对话框消失"), InputDialog.build().setTitle("请注意").setMessage("你必须使用 .build() 方法构建,并保证不要自己执行 .show() 方法").setInputText("输入文字").setOkButton("知道了"), TipDialog.build().setMessageContent("准备结束...").setTipType(WaitDialog.TYPE.SUCCESS), BottomDialog.build().setTitle("结束").setMessage("下滑以结束旅程,祝你编码愉快!").setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_dialog) {
  927. @Override
  928. public void onBind(BottomDialog dialog, View v) {
  929. ImageView btnOk;
  930. btnOk = v.findViewById(R.id.btn_ok);
  931. btnOk.setOnClickListener(new View.OnClickListener() {
  932. @Override
  933. public void onClick(View v) {
  934. dialog.dismiss();
  935. }
  936. });
  937. }
  938. }));
  939. }
  940. });
  941. btnFullScreenDialogLogin.setOnClickListener(new View.OnClickListener() {
  942. /**
  943. * 采用异步加载布局防止卡顿测试
  944. */
  945. OnBindView<FullScreenDialog> onBindView;
  946. @Override
  947. public void onClick(View v) {
  948. onBindView = new OnBindView<FullScreenDialog>(R.layout.layout_full_login, true) {
  949. @Override
  950. public void onBind(FullScreenDialog dialog, View v) {
  951. btnCancel = v.findViewById(R.id.btn_cancel);
  952. btnSubmit = v.findViewById(R.id.btn_submit);
  953. boxUserName = v.findViewById(R.id.box_userName);
  954. editUserName = v.findViewById(R.id.edit_userName);
  955. boxPassword = v.findViewById(R.id.box_password);
  956. editPassword = v.findViewById(R.id.edit_password);
  957. btnLicense = v.findViewById(R.id.btn_license);
  958. initFullScreenLoginDemo(dialog);
  959. }
  960. };
  961. FullScreenDialog.show(onBindView);
  962. }
  963. });
  964. btnFullScreenDialogWebPage.setOnClickListener(new View.OnClickListener() {
  965. @Override
  966. public void onClick(View v) {
  967. FullScreenDialog.show(new OnBindView<FullScreenDialog>(R.layout.layout_full_webview) {
  968. @Override
  969. public void onBind(final FullScreenDialog dialog, View v) {
  970. btnClose = v.findViewById(R.id.btn_close);
  971. webView = v.findViewById(R.id.webView);
  972. btnClose.setOnClickListener(new View.OnClickListener() {
  973. @Override
  974. public void onClick(View v) {
  975. dialog.dismiss();
  976. }
  977. });
  978. WebSettings webSettings = webView.getSettings();
  979. webSettings.setJavaScriptEnabled(true);
  980. webSettings.setLoadWithOverviewMode(true);
  981. webSettings.setUseWideViewPort(true);
  982. webSettings.setSupportZoom(false);
  983. webSettings.setAllowFileAccess(true);
  984. webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
  985. webSettings.setLoadsImagesAutomatically(true);
  986. webSettings.setDefaultTextEncodingName("utf-8");
  987. webView.setWebViewClient(new WebViewClient() {
  988. @Override
  989. public boolean shouldOverrideUrlLoading(WebView view, String url) {
  990. try {
  991. Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
  992. startActivity(intent);
  993. } catch (ActivityNotFoundException e) {
  994. e.printStackTrace();
  995. }
  996. return true;
  997. }
  998. @Override
  999. public void onPageFinished(WebView view, String url) {
  1000. super.onPageFinished(view, url);
  1001. }
  1002. });
  1003. webView.loadUrl("https://github.com/kongzue/DialogX");
  1004. }
  1005. }).setBottomNonSafetyAreaBySelf(false);
  1006. }
  1007. });
  1008. btnCustomDialog.setOnClickListener(new View.OnClickListener() {
  1009. @Override
  1010. public void onClick(View v) {
  1011. // //创建一个自定义 View,这里拿 TextView 举例
  1012. // TextView customView = new TextView(me);
  1013. // customView.setText("Custom View");
  1014. // customView.setGravity(Gravity.CENTER);
  1015. // customView.setBackgroundColor(Color.WHITE);
  1016. // //宽度 200dp,满高度
  1017. // customView.setLayoutParams(new ViewGroup.LayoutParams(dip2px(200), ViewGroup.LayoutParams.MATCH_PARENT));
  1018. //
  1019. // //创建对话框
  1020. // CustomDialog.show(new OnBindView<CustomDialog>(customView) {
  1021. // @Override
  1022. // public void onBind(CustomDialog dialog, View v) {
  1023. // //处理沉浸式非安全区(如果需要)
  1024. // dialog.getDialogImpl().boxRoot.setOnSafeInsetsChangeListener(new OnSafeInsetsChangeListener() {
  1025. // @Override
  1026. // public void onChange(Rect unsafeRect) {
  1027. // v.setPadding(unsafeRect.left, unsafeRect.top, unsafeRect.right, unsafeRect.bottom);
  1028. // }
  1029. // });
  1030. // }
  1031. // })
  1032. // //从屏幕左侧显示
  1033. // .setAlign(CustomDialog.ALIGN.LEFT)
  1034. // //关闭默认安全区沉浸式,让自定义 view 能够显示到非安全区外
  1035. // .setEnableImmersiveMode(false)
  1036. // //设置背景遮罩 30% 透明黑
  1037. // .setMaskColor(getResources().getColor(com.kongzue.dialogx.iostheme.R.color.black30));
  1038. CustomDialog.show(new OnBindView<CustomDialog>(R.layout.layout_custom_dialog) {
  1039. @Override
  1040. public void onBind(final CustomDialog dialog, View v) {
  1041. ImageView btnOk;
  1042. btnOk = v.findViewById(R.id.btn_ok);
  1043. btnOk.setOnClickListener(new View.OnClickListener() {
  1044. @Override
  1045. public void onClick(View v) {
  1046. dialog.dismiss();
  1047. }
  1048. });
  1049. }
  1050. }).setMaskColor(getColorS(com.kongzue.dialogx.R.color.black50)).setOnBackgroundMaskClickListener(new OnBackgroundMaskClickListener<CustomDialog>() {
  1051. @Override
  1052. public boolean onClick(CustomDialog dialog, View v) {
  1053. log("点击遮罩层");
  1054. return false;
  1055. }
  1056. }).setMaskColor(getResources().getColor(com.kongzue.dialogx.iostheme.R.color.black30))
  1057. // .setAlign(CustomDialog.ALIGN.LEFT)
  1058. //.setAnimResId(R.anim.anim_right_in, R.anim.anim_right_out)
  1059. //实现完全自定义动画效果
  1060. // .setDialogXAnimImpl(new DialogXAnimInterface<CustomDialog>() {
  1061. // @Override
  1062. // public void doShowAnim(CustomDialog customDialog, ViewGroup dialogBodyView) {
  1063. // Animation enterAnim;
  1064. //
  1065. // int enterAnimResId = com.kongzue.dialogx.R.anim.anim_dialogx_top_enter;
  1066. // enterAnim = AnimationUtils.loadAnimation(me, enterAnimResId);
  1067. // enterAnim.setInterpolator(new DecelerateInterpolator(2f));
  1068. //
  1069. // long enterAnimDurationTemp = enterAnim.getDuration();
  1070. //
  1071. // enterAnim.setDuration(enterAnimDurationTemp);
  1072. // customDialog.getDialogImpl().boxCustom.startAnimation(enterAnim);
  1073. //
  1074. // ValueAnimator bkgAlpha = ValueAnimator.ofFloat(0f, 1f);
  1075. // bkgAlpha.setDuration(enterAnimDurationTemp);
  1076. // bkgAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
  1077. // @Override
  1078. // public void onAnimationUpdate(ValueAnimator animation) {
  1079. // if (customDialog.getDialogImpl() == null || customDialog.getDialogImpl().boxRoot == null) {
  1080. // return;
  1081. // }
  1082. // customDialog.getDialogImpl().boxRoot.setBkgAlpha((Float) animation.getAnimatedValue());
  1083. // }
  1084. // });
  1085. // bkgAlpha.start();
  1086. // }
  1087. //
  1088. // @Override
  1089. // public void doExitAnim(CustomDialog customDialog, ViewGroup dialogBodyView) {
  1090. // int exitAnimResIdTemp = com.kongzue.dialogx.R.anim.anim_dialogx_default_exit;
  1091. //
  1092. // Animation exitAnim = AnimationUtils.loadAnimation(me, exitAnimResIdTemp);
  1093. // customDialog.getDialogImpl().boxCustom.startAnimation(exitAnim);
  1094. //
  1095. // ValueAnimator bkgAlpha = ValueAnimator.ofFloat(1f, 0f);
  1096. // bkgAlpha.setDuration(exitAnim.getDuration());
  1097. // bkgAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
  1098. // @Override
  1099. // public void onAnimationUpdate(ValueAnimator animation) {
  1100. // if (customDialog.getDialogImpl() == null || customDialog.getDialogImpl().boxRoot == null) {
  1101. // return;
  1102. // }
  1103. // customDialog.getDialogImpl().boxRoot.setBkgAlpha((Float) animation.getAnimatedValue());
  1104. // }
  1105. // });
  1106. // bkgAlpha.start();
  1107. // }
  1108. // })
  1109. ;
  1110. }
  1111. });
  1112. btnCustomDialogAlign.setOnClickListener(new View.OnClickListener() {
  1113. @Override
  1114. public void onClick(View v) {
  1115. CustomDialog.show(new OnBindView<CustomDialog>(R.layout.layout_custom_dialog_align) {
  1116. private TextView btnSelectPositive;
  1117. @Override
  1118. public void onBind(final CustomDialog dialog, View v) {
  1119. btnSelectPositive = v.findViewById(R.id.btn_selectPositive);
  1120. btnSelectPositive.setOnClickListener(new View.OnClickListener() {
  1121. @Override
  1122. public void onClick(View v) {
  1123. PopTip.show("我知道了");
  1124. dialog.dismiss();
  1125. }
  1126. });
  1127. }
  1128. }).setCancelable(false).setMaskColor(getResources().getColor(com.kongzue.dialogx.iostheme.R.color.black30)).setEnterAnimResId(R.anim.anim_custom_pop_enter).setExitAnimResId(R.anim.anim_custom_pop_exit).setAlignBaseViewGravity(btnCustomDialogAlign, Gravity.TOP | Gravity.CENTER_HORIZONTAL).setBaseViewMarginBottom(-dip2px(45)).show();
  1129. }
  1130. });
  1131. btnPoptip.setOnClickListener(new View.OnClickListener() {
  1132. @Override
  1133. public void onClick(View v) {
  1134. PopTip.show("这是一个提示");
  1135. }
  1136. });
  1137. btnPoptipBigMessage.setOnClickListener(new View.OnClickListener() {
  1138. @Override
  1139. public void onClick(View v) {
  1140. if (rdoIos.isChecked()) {
  1141. PopTip.show(R.mipmap.img_air_pods_pro, "AirPods Pro 已连接").setTintIcon(false).showLong();
  1142. } else {
  1143. PopTip.show(R.mipmap.img_mail_line_white, "邮件已发送", "撤回").setButton(new OnDialogButtonClickListener<PopTip>() {
  1144. @Override
  1145. public boolean onClick(PopTip popTip, View v) {
  1146. //点击“撤回”按钮回调
  1147. toast("邮件已撤回");
  1148. return false;
  1149. }
  1150. }).setTintIcon(true).showLong();
  1151. }
  1152. }
  1153. });
  1154. btnPoptipSuccess.setOnClickListener(new View.OnClickListener() {
  1155. @Override
  1156. public void onClick(View v) {
  1157. PopTip.show("操作已完成").iconSuccess();
  1158. }
  1159. });
  1160. btnPoptipWarning.setOnClickListener(new View.OnClickListener() {
  1161. @Override
  1162. public void onClick(View v) {
  1163. PopTip.show("存储空间不足").setButton("立即清理", new OnDialogButtonClickListener<PopTip>() {
  1164. @Override
  1165. public boolean onClick(PopTip baseDialog, View v) {
  1166. toast("点击了立即清理");
  1167. return false;
  1168. }
  1169. }).iconWarning();
  1170. }
  1171. });
  1172. btnPoptipError.setOnClickListener(new View.OnClickListener() {
  1173. @Override
  1174. public void onClick(View v) {
  1175. PopTip.show("无法连接网络").iconError();
  1176. }
  1177. });
  1178. btnBottomSelectMenu.setOnClickListener(new View.OnClickListener() {
  1179. @Override
  1180. public void onClick(View v) {
  1181. BottomMenu.show(singleSelectMenuText).setShowSelectedBackgroundTips(rdoMiui.isChecked()).setMessage("这里是权限确认的文本说明,这是一个演示菜单").setTitle("获得权限标题").setOnMenuItemClickListener(new OnMenuItemSelectListener<BottomMenu>() {
  1182. @Override
  1183. public void onOneItemSelect(BottomMenu dialog, CharSequence text, int index, boolean select) {
  1184. selectMenuIndex = index;
  1185. }
  1186. }).setCancelButton("确定", new OnMenuButtonClickListener<BottomMenu>() {
  1187. @Override
  1188. public boolean onClick(BottomMenu baseDialog, View v) {
  1189. PopTip.show("已选择:" + singleSelectMenuText[selectMenuIndex]);
  1190. return false;
  1191. }
  1192. }).setSelection(selectMenuIndex);
  1193. }
  1194. });
  1195. btnBottomMultiSelectMenu.setOnClickListener(new View.OnClickListener() {
  1196. @Override
  1197. public void onClick(View v) {
  1198. BottomMenu.show(multiSelectMenuText).setMessage("这里是选择城市的模拟范例,这是一个演示菜单").setTitle("请选择城市").setOnMenuItemClickListener(new OnMenuItemSelectListener<BottomMenu>() {
  1199. @Override
  1200. public void onMultiItemSelect(BottomMenu dialog, CharSequence[] text, int[] index) {
  1201. multiSelectMenuResultCache = "";
  1202. for (CharSequence c : text) {
  1203. multiSelectMenuResultCache = multiSelectMenuResultCache + " " + c;
  1204. }
  1205. selectMenuIndexArray = index;
  1206. }
  1207. }).setOkButton("确定", new OnMenuButtonClickListener<BottomMenu>() {
  1208. @Override
  1209. public boolean onClick(BottomMenu dialog, View v) {
  1210. PopTip.show("已选择:" + multiSelectMenuResultCache);
  1211. return false;
  1212. }
  1213. })
  1214. // .setCancelButton("确定", new OnDialogButtonClickListener<BottomDialog>() {
  1215. // @Override
  1216. // public boolean onClick(BottomDialog baseDialog, View v) {
  1217. // PopTip.show("已选择:" + multiSelectMenuResultCache);
  1218. // return false;
  1219. // }
  1220. // })
  1221. .setSelection(selectMenuIndexArray);
  1222. }
  1223. });
  1224. btnBottomCustomRecycleView.setOnClickListener(new View.OnClickListener() {
  1225. @Override
  1226. public void onClick(View v) {
  1227. BottomDialog.build().setCustomView(new OnBindView<BottomDialog>(R.layout.layout_custom_recycleview) {
  1228. @Override
  1229. public void onBind(BottomDialog dialog, View v) {
  1230. List<CustomRecycleViewAdapter.Data> dataArrayList = new ArrayList<>();
  1231. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 1"));
  1232. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 2"));
  1233. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 3"));
  1234. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 4"));
  1235. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 5"));
  1236. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 6"));
  1237. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 7"));
  1238. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 8"));
  1239. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 9"));
  1240. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 10"));
  1241. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 11"));
  1242. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 12"));
  1243. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 13"));
  1244. dataArrayList.add(new CustomRecycleViewAdapter.Data("Item Text 14"));
  1245. RecyclerView recyclerView = (RecyclerView) v;
  1246. LinearLayoutManager layoutManager = new LinearLayoutManager(me);
  1247. recyclerView.setLayoutManager(layoutManager);
  1248. CustomRecycleViewAdapter adapter = new CustomRecycleViewAdapter(dataArrayList);
  1249. adapter.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  1250. @Override
  1251. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
  1252. PopTip.show("点击了第 " + position + " 个");
  1253. }
  1254. });
  1255. recyclerView.setAdapter(adapter);
  1256. }
  1257. }).setScrollableWhenContentLargeThanVisibleRange(false).show();
  1258. }
  1259. });
  1260. btnPopnotification.setOnClickListener(new View.OnClickListener() {
  1261. @Override
  1262. public void onClick(View v) {
  1263. notificationIndex++;
  1264. PopNotification.build().setMessage("这是一条消息 " + notificationIndex).setOnPopNotificationClickListener(new OnDialogButtonClickListener<PopNotification>() {
  1265. @Override
  1266. public boolean onClick(PopNotification dialog, View v) {
  1267. tip("点击了通知" + dialog.dialogKey());
  1268. return true;
  1269. }
  1270. }).show();
  1271. }
  1272. });
  1273. btnPopnotificationBigMessage.setOnClickListener(new View.OnClickListener() {
  1274. @Override
  1275. public void onClick(View v) {
  1276. Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.img_demo_avatar);
  1277. notificationIndex++;
  1278. PopNotification.show("这是一条消息 " + notificationIndex, "吃了没?\uD83E\uDD6A").setIcon(icon).setButton("回复", new OnDialogButtonClickListener<PopNotification>() {
  1279. @Override
  1280. public boolean onClick(PopNotification baseDialog, View v) {
  1281. toast("点击回复按钮");
  1282. return false;
  1283. }
  1284. }).showLong();
  1285. }
  1286. });
  1287. btnPopnotificationOverlay.setOnClickListener(new View.OnClickListener() {
  1288. @Override
  1289. public void onClick(View v) {
  1290. DialogX.globalHoverWindow = true;
  1291. //悬浮窗权限检查
  1292. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  1293. if (!Settings.canDrawOverlays(me)) {
  1294. Toast.makeText(me, "使用 DialogX.globalHoverWindow 必须开启悬浮窗权限", Toast.LENGTH_LONG).show();
  1295. Intent intent = new Intent();
  1296. intent.setAction(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
  1297. startActivity(intent);
  1298. return;
  1299. }
  1300. }
  1301. Bitmap icon = BitmapFactory.decodeResource(getResources(), R.mipmap.img_demo_avatar);
  1302. notificationIndex++;
  1303. Toast.makeText(me, "会在1秒后显示悬浮窗!", Toast.LENGTH_LONG).show();
  1304. //跳转到桌面
  1305. Intent intent = new Intent(Intent.ACTION_MAIN);
  1306. intent.addCategory(Intent.CATEGORY_HOME);
  1307. intent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK);
  1308. startActivity(intent);
  1309. //等待一秒后显示
  1310. new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
  1311. @Override
  1312. public void run() {
  1313. PopNotification.build().setDialogImplMode(DialogX.IMPL_MODE.WINDOW).setTitle("这是一条消息 " + notificationIndex).setIcon(icon).setButton("回复", new OnDialogButtonClickListener<PopNotification>() {
  1314. @Override
  1315. public boolean onClick(PopNotification baseDialog, View v) {
  1316. Intent intent = new Intent(me, MainActivity.class);
  1317. intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
  1318. startActivity(intent);
  1319. return false;
  1320. }
  1321. }).showLong();
  1322. }
  1323. }, 1000);
  1324. }
  1325. });
  1326. }
  1327. int notificationIndex;
  1328. private void initFullScreenLoginDemo(final FullScreenDialog fullScreenDialog) {
  1329. btnCancel.setOnClickListener(new View.OnClickListener() {
  1330. @Override
  1331. public void onClick(View v) {
  1332. fullScreenDialog.dismiss();
  1333. }
  1334. });
  1335. btnCancel.setText("取消");
  1336. btnSubmit.setText("下一步");
  1337. btnLicense.setOnClickListener(new View.OnClickListener() {
  1338. @Override
  1339. public void onClick(View v) {
  1340. PopTip.show("点击用户服务条款");
  1341. }
  1342. });
  1343. btnSubmit.setOnClickListener(new View.OnClickListener() {
  1344. @Override
  1345. public void onClick(View v) {
  1346. if (isNull(editUserName.getText().toString().trim())) {
  1347. hideIME(null);
  1348. TipDialog.show("请输入账号", TipDialog.TYPE.WARNING);
  1349. return;
  1350. }
  1351. boxUserName.animate().x(-getDisplayWidth()).setDuration(300);
  1352. boxPassword.setX(getDisplayWidth());
  1353. boxPassword.setVisibility(View.VISIBLE);
  1354. boxPassword.animate().x(0).setDuration(300);
  1355. editPassword.setFocusable(true);
  1356. editPassword.requestFocus();
  1357. btnCancel.setText("上一步");
  1358. btnCancel.setOnClickListener(new View.OnClickListener() {
  1359. @Override
  1360. public void onClick(View v) {
  1361. boxUserName.animate().x(0).setDuration(300);
  1362. boxPassword.animate().x(getDisplayWidth()).setDuration(300);
  1363. editUserName.setFocusable(true);
  1364. editUserName.requestFocus();
  1365. initFullScreenLoginDemo(fullScreenDialog);
  1366. }
  1367. });
  1368. btnSubmit.setText("登录");
  1369. btnSubmit.setOnClickListener(new View.OnClickListener() {
  1370. @Override
  1371. public void onClick(View v) {
  1372. hideIME(null);
  1373. if (isNull(editPassword.getText().toString().trim())) {
  1374. TipDialog.show("请输入密码", TipDialog.TYPE.WARNING);
  1375. return;
  1376. }
  1377. WaitDialog.show("登录中...");
  1378. runOnMainDelayed(new Runnable() {
  1379. @Override
  1380. public void run() {
  1381. TipDialog.show("登录成功", TipDialog.TYPE.SUCCESS).setDialogLifecycleCallback(new DialogLifecycleCallback<WaitDialog>() {
  1382. @Override
  1383. public void onDismiss(WaitDialog dialog) {
  1384. fullScreenDialog.dismiss();
  1385. }
  1386. });
  1387. }
  1388. }, 2000);
  1389. }
  1390. });
  1391. }
  1392. });
  1393. }
  1394. @Override
  1395. public void onBackPressed() {
  1396. log("#MainActivity.onBackPressed");
  1397. super.onBackPressed();
  1398. }
  1399. public void showIME(EditText editText) {
  1400. if (editText == null) {
  1401. return;
  1402. }
  1403. editText.requestFocus();
  1404. editText.setFocusableInTouchMode(true);
  1405. InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
  1406. imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
  1407. }
  1408. @Override
  1409. public void onConfigurationChanged(@NonNull Configuration newConfig) {
  1410. super.onConfigurationChanged(newConfig);
  1411. refreshUIMode();
  1412. }
  1413. /**
  1414. * 刷新亮暗色模式界面变化
  1415. */
  1416. private void refreshUIMode() {
  1417. if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO) {
  1418. setDarkStatusBarTheme(true);
  1419. } else {
  1420. setDarkStatusBarTheme(false);
  1421. }
  1422. }
  1423. @Override
  1424. protected void onDestroy() {
  1425. super.onDestroy();
  1426. log("MainActivity#onDestroy");
  1427. }
  1428. @Override
  1429. protected void onCreate(Bundle savedInstanceState) {
  1430. // AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
  1431. super.onCreate(savedInstanceState);
  1432. }
  1433. }