WindowManager windowManager = (WindowManager)
applicationContext.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams();
layoutParams.type = WindowManager.LayoutParams.TYPE_TOAST;
windowManager.addView(view, layoutParams);
public class BaseApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityStarted(Activity activity) {
if(findViewById(R.id.floating_view_id) != null) return;
View view = LayoutInflater.from(activity).inflate(R.layout.floating_view, null);
view.setId(R.id.floating_view_id);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
view.setTransitionName(activity.getString(R.string.transitionName));
}
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.gravity = Gravity.TOP | Gravity.LEFT;
activity.addContentView(mPopView, mLayoutParams);
}
//省略...
Intent intent = new Intent(this, Main2Activity.class);
View view = findViewById(R.id.floating_view_id);
if ( view != null) {
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
this,view, getString(R.string.transitionName));
ContextCompat.startActivity(this, intent, options.toBundle());
}else{
startActivity(intent);
}
/**
* Set the view to show.
* @see #getView
*/
public void setView(View view) {
mNextView = view;
}
/**
* 自定义 toast , 无限时长
* 可设置显示位置 尺寸
*/
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 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();
}
}
}
FixedFloatWindow fixedFloatWindow = new FixedFloatWindow(getApplicationContext()); fixedFloatWindow.setView(view); fixedFloatWindow.setGravity(Gravity.RIGHT | Gravity.TOP, 100, 150); fixedFloatWindow.show(); // fixedFloatWindow.hide();
@Override
public void onActivityStarted(Activity activity) {
mActivityNum++;
if (isNeedShow(activity)) {
show();
}else{
hide();
}
}
@Override
public void onActivityStopped(Activity activity) {
mActivityNum--;
if (mActivityNum == 0) {
hide();
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有