Android原生弹框的工具类AlertDialog,Dialog
16lz
2021-01-23
最近在新项目的开发中,经常使用要使用到Android的AlertDialog弹框,所以做了一个简单的封装。
/**提示框 * * @param tipText 要提示的文本 * @param mContext 视图上下文 */ public static void showTipDialog(String tipText,Context mContext, DialogInterface.OnClickListener confirm, DialogInterface.OnClickListener cancel){ if (mContext == null){ System.out.println("showTipDialog: mContext is null"); return ; } AlertDialog.Builder builder = new AlertDialog.Builder(mContext); builder.setTitle("提示"); TextView mMsg = new TextView(mContext); mMsg.setText(tipText); mMsg.setGravity(Gravity.CENTER_HORIZONTAL); mMsg.setTextSize(18); builder.setView(mMsg); builder.setCancelable(false); if (confirm != null){ builder.setPositiveButton("确定", confirm); } if (cancel != null){ builder.setNegativeButton("取消", cancel); } Dialog tipDialog = builder.create(); tipDialog.setCanceledOnTouchOutside(false); tipDialog.show(); }
封装一个调用弹框得方法虽然简单,但是在使用中也遇到了一些问题,比较严重的就是在非Activity中使用时传入的上下文对象会导致应用异常退出,原因就是Dialog找不到一个视图页面可以依附,为了解决这个问题下面的工具类也就应运而生。
/** * 通过application获取栈顶的activity实例 * @param application * @return */ public static Activity getTopActivity(Application application) { Activity activity = null; try { Class clz = application.getClass().forName("android.app.ActivityThread"); Method meth = clz.getMethod("currentActivityThread"); Object currentActivityThread = meth.invoke(null); Field f = clz.getDeclaredField("mActivities"); f.setAccessible(true); ArrayMap obj = (ArrayMap) f.get(currentActivityThread); for (Object key : obj.keySet()) { Object activityRecord = obj.get(key); Field actField = activityRecord.getClass().getDeclaredField("activity"); actField.setAccessible(true); activity = (Activity) actField.get(activityRecord); } } catch (Exception e) { e.printStackTrace(); } return activity; }
这两个方法配合着使用就可以在任何地方弹出提示框。
更多相关文章
- Android弹出式提示框 PopupWindow
- android实现好看的自定义提示框
- Android使用Toast显示提示信息
- 【Android】自动提示匹配之AutoCompleteTextView
- Android 监控应用删除,并提示处理
- 动态创建ImageView视图
- Android 仿 Iphone 自定义滚条视图(wheelview)
- android使用SharedPreferences保存值,值变化会提示
- Android动态创建ListView视图,动态增加和删除Item.