首先在我们日常开发中会经常遇到给某某页面添加一个实时的浮窗(给你一个开始时间与结束时间,点击叉号第二天再展示),时间判断这里就就不说了以前的博客里面有,那么我们就需要添加一个布局了我的一开始是怎么做的
本人错误1.
直接插入布局 如果数据不是实时也无所谓,但是数据是实时的,就会出现一个问题就是,在前后台切换时第二次切换回来广播通知展示但是点击事件会出现无效的现象(本人推测可以能是需要添加一个容器来addview)
View inflate = LayoutInflater.from(getActivity()).inflate(com.sina.weibo.sdk.R.layout.floating_window_views, this);
本人错误2.
那么好既然这样不好使我试试用getWindow().getDecorView().getRootView()(Window)
会不会出现点击事件无效,这回呢 点击事件可以好嘛 ! 见到太阳了 但是又会出现布局移动不了(这个时候布局的操作基本无效)的问题那就得用LayoutParams了呗在动态的设置Margin 请看代码2. 这次可以移动了当前手机也移动到了想要的位置但是还是不行换成其他手机位置偏了
代码1.
View rootView = getActivity().getWindow().getDecorView().getRootView();
ViewGroup contentView = getActivity().findViewById(android.R.id.content);
View inflate = LayoutInflater.from(getActivity()).inflate(com.sina.weibo.sdk.R.layout.floating_window_views, null);
contentView.removeView(inflate);
代码2.
View rootView = getActivity().getWindow().getDecorView().getRootView();
ViewGroup contentView = getActivity().findViewById(android.R.id.content);
View inflate = LayoutInflater.from(getActivity()).inflate(com.sina.weibo.sdk.R.layout.floating_window_views, null);
LinearLayout.LayoutParams param=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
param.setMargins(10,1700,10,10);
contentView.removeView(inflate,param);
本人错误3.
换手机位置就会偏这个时候就要进行动态的获取屏幕的高度减去buttonbar了这回位置可以了但是还会出现一个问题就是这个浮窗啊 不仅在首页也显示 在其他页面还显示崩溃了这是个啥
View rootView = getActivity().getWindow().getDecorView().getRootView();
ViewGroup contentView =rootView.findViewById(android.R.id.content);
View inflate = LayoutInflater.from(getActivity()).inflate(com.sina.weibo.sdk.R.layout.floating_window_views, null);
LinearLayout.LayoutParams param=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
Display display = getActivity().getWindowManager().getDefaultDisplay();
int height = display.getHeight();
param.setMargins(10,height-350,10,10);
contentView.addView(inflate,param);
经历来四次悲伤
最终代码
解决方式 首先删除View rootView = getActivity().getWindow().getDecorView().getRootView();
然后就是判断上下文 全部问题解决
//如果彻底解决布局重叠问题需要判断布局是否创建如果inflate
if (TAGS == 0) {
TAGS = 1;
ViewGroup contentView = getActivity().findViewById(android.R.id.content);
if(inflate!=null){
inflate = LayoutInflater.from(getActivity()).inflate(com.sina.weibo.sdk.R.layout.floating_w
}else{
contentView.removeView(inflate);
}
indow_views, null);
LinearLayout.LayoutParams param=new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
Display display = getActivity().getWindowManager().getDefaultDisplay();
int height = display.getHeight();
param.setMargins(10,height-350,10,10);
//获取图片id
floating_img = inflate.findViewById(R.id.floating_img);
//叉号
close_window_img = inflate.findViewById(R.id.close_window_img);
//浮窗
small_window_layout = inflate.findViewById(R.id.small_window_layout);
//根据服务端显示或者隐藏首页浮窗
rel_img = inflate.findViewById(R.id.Rel_img);
//获取sp里面存储的json数据
String json = SharePrefManager.getDefaultSystemInstance(getContext()).getString(KEY_VISITOR_GUIDE_JSON_DATAS, "");
//只在首页模块展示
if (getActivity() instanceof HomeActivity && getContext() instanceof HomeActivity){
contentView.addView(inflate,param);
}else {
contentView.removeView(inflate);
}
//天际小叉号逻辑(一天内不进行展示)
close_window_img.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
//是否点击差号
SharePrefManager.getDefaultSystemInstance(getContext()).putBoolean(KEY_ISCHECKOUT_WONDOW_CAHAHAO, true);
//点击时存入时间
long currentTime = System.currentTimeMillis();
SharePrefManager.getDefaultSystemInstance(getContext()).putLong(KET_CANCEL_TIME_WINDOW, currentTime);//记住cancel时间
//在这里用sp进行记录是否关闭
rel_img.setVisibility(GONE);
close_window_img.setVisibility(GONE);
//为力浮窗实时效果需要用广播监听前后台设置tag来防止重复绘制
TAGS = 0;
inflate=null;
}
});
}
最后多一句嘴就是当广播走到的时候会进行再次绘制这样你的布局就会叠加这个时候你需要设置一个变量,默认等一0当进入方法的时候就将变量的变成1当点击事件点击完成后设置为0
private static int TAGS = 0;
if(TAGS==0){
TAGS=1;
why.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
代表执行完毕
TAGS=0;
}
}
}
不要用启动模式或者加锁没有用的
886

6万+

被折叠的 条评论
为什么被折叠?



