public class AlwaysShowToast { private Toast toast; private Object mTN; private Method show; private Method hide; private int mWidth = WindowManager.LayoutParams.WRAP_CONTENT; private int mHeight = WindowManager.LayoutParams.WRAP_CONTENT; public void FixedFloatToast(Context applicationContext) { toast = new Toast(applicationContext); } public void setView(View view, int width, int height) { mWidth = width; mHeight = height; setView(view); } public void setView(View view) { toast.setView(view); initTN(); } public void setGravity(int gravity, int xOffset, int yOffset) { toast.setGravity(gravity, xOffset, yOffset); } public void show() { try { show.invoke(mTN); } catch (Exception e) { e.printStackTrace(); } } public void hide() { try { hide.invoke(mTN); } catch (Exception e) { e.printStackTrace(); } } /** * 利用反射设置 toast 参数 */ private void initTN() { try { Field tnField = toast.getClass().getDeclaredField("mTN"); tnField.setAccessible(true); mTN = tnField.get(toast); show = mTN.getClass().getMethod("show"); hide = mTN.getClass().getMethod("hide"); Field tnParamsField = mTN.getClass().getDeclaredField("mParams"); tnParamsField.setAccessible(true); WindowManager.LayoutParams params = (WindowManager.LayoutParams) tnParamsField.get(mTN); params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; params.width = mWidth; params.height = mHeight; Field tnNextViewField = mTN.getClass().getDeclaredField("mNextView"); tnNextViewField.setAccessible(true); tnNextViewField.set(mTN, toast.getView()); } catch (Exception e) { e.printStackTrace(); } } }
永久展示一个Toast
最新推荐文章于 2024-04-18 10:27:44 发布