Android贴吧系统学习-----悬浮布局的做法
来源:互联网 发布:mysql indexof 编辑:程序博客网 时间:2024/06/13 06:21
<span style="font-size:18px;"><strong>//悬浮窗口private LinearLayout mFloatLayout; private WindowManager.LayoutParams wmParams; //创建浮动窗口设置布局参数的对象 private WindowManager mWindowManager; private boolean isFloatAttached = false;private int tabPosition = 0;@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();if(tabPosition == 2 && isFloatAttached == false)createFloatView();}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop();if(null != mFloatLayout && isFloatAttached == true){mWindowManager.removeView(mFloatLayout);isFloatAttached = false;}}@Overrideprotected void onSaveInstanceState(Bundle outState) {// TODO Auto-generated method stubsuper.onSaveInstanceState(outState);outState.putInt("position", tabPosition);outState.putBoolean("is_attached", isFloatAttached);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onRestoreInstanceState(savedInstanceState);tabPosition = savedInstanceState.getInt("position");isFloatAttached = savedInstanceState.getBoolean("is_attached");}switch (checkedIndex) {case 0:////////////tabPosition = 0; if(null != mFloatLayout && isFloatAttached == true) { mWindowManager.removeView(mFloatLayout); isFloatAttached = false; }/////////////////fragment = fragments.get(0);//对应编号为0的fragmenttransaction.replace(R.id.main_framelayout, fragment);transaction.commit();title.setText("菜单1");break;case 1:tabPosition = 1; if(null != mFloatLayout && isFloatAttached == true) { mWindowManager.removeView(mFloatLayout); isFloatAttached = false; }fragment = fragments.get(1);////对应编号为1的fragmenttransaction.replace(R.id.main_framelayout, fragment);transaction.commit();title.setText("菜单2");break;case 2:tabPosition = 2; if(isFloatAttached == false) createFloatView();//这里放置的是发布break;case 3:tabPosition = 3; if(null != mFloatLayout && isFloatAttached == true) { mWindowManager.removeView(mFloatLayout); isFloatAttached = false; }fragment = fragments.get(2);//对应编号为2的fragmenttransaction.replace(R.id.main_framelayout, fragment);transaction.commit();title.setText("菜单4");break;case 4:tabPosition = 4; if(null != mFloatLayout && isFloatAttached == true) { mWindowManager.removeView(mFloatLayout); isFloatAttached = false; }fragment = fragments.get(3);//对应编号为3的fragmenttransaction.replace(R.id.main_framelayout, fragment);transaction.commit();title.setText("菜单5");break;default:break;}//添加浮动窗口 private void createFloatView() { wmParams = new WindowManager.LayoutParams(); //获取的是WindowManagerImpl.CompatModeWrapper mWindowManager = (WindowManager)getApplication().getSystemService(getApplication().WINDOW_SERVICE); //设置window type wmParams.type = LayoutParams.TYPE_PHONE; //设置图片格式,效果为背景透明 wmParams.format = PixelFormat.RGBA_8888; //设置浮动窗口不可聚焦(实现操作除浮动窗口外的其他可见窗口的操作) wmParams.flags = LayoutParams.FLAG_NOT_FOCUSABLE; //调整悬浮窗显示的停靠位置为左侧置顶 wmParams.gravity = Gravity.RIGHT| Gravity.BOTTOM; // 以屏幕左上角为原点,设置x、y初始值,相对于gravity wmParams.x = Dp2Px(getApplicationContext(), 20); wmParams.y = Dp2Px(getApplicationContext(), 80); //设置悬浮窗口长宽数据 wmParams.width = WindowManager.LayoutParams.WRAP_CONTENT; wmParams.height = WindowManager.LayoutParams.WRAP_CONTENT; /*// 设置悬浮窗口长宽数据 wmParams.width = 200; wmParams.height = 80;*/ LayoutInflater inflater = LayoutInflater.from(getApplication()); //获取浮动窗口视图所在布局 mFloatLayout = (LinearLayout) inflater.inflate(R.layout.tieba_add_float, null); //添加mFloatLayout mWindowManager.addView(mFloatLayout, wmParams); isFloatAttached = true; //浮动窗口按钮 mFloatLayout.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec .makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); //设置监听浮动窗口的触摸移动 ImageView addImg = (ImageView)mFloatLayout.findViewById(R.id.add_float); addImg.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubstartActivity(new Intent(NewStartActivity.this,WritePostActivity.class));}}); } </strong></span>
在上面我的菜单用的是 radioGruop控件,只需要在自己需要的界面中把悬浮布局弄出来就行,
另外在onstop 和onresume生命周期里面也需要控制下,
0 0
- Android贴吧系统学习-----悬浮布局的做法
- Android贴吧系统学习-----悬浮布局出现的bug--android.view.WindowManager$BadTokenException:
- Android布局居中的几种做法
- 悬浮标题Listview的简单做法
- Android 系统级悬浮按钮的实现
- Android-系统悬浮窗
- Android学习 - 悬浮控件
- android 悬浮窗不影响系统交互的window参数设置
- android布局的学习
- android布局的学习
- 悬浮窗口的学习
- android AlertDialog的做法
- android 悬浮窗学习笔记
- Android布局的学习总结
- Android 的布局组件学习
- android布局的基础学习
- Android的布局学习笔记
- Android开发随手记--系统悬浮框
- 代码语言编写技巧
- 学习重点
- TCP/IP 协议栈及 OSI 参考模型详解
- linux源代码 net文件夹
- 1329 - Corporative Network(并查集)
- Android贴吧系统学习-----悬浮布局的做法
- Ubuntu 输入密码之后闪现一下又回答输入密码界面
- 解决树莓派2 HDMI输出的闪屏问题
- ajax+springmvc不执行success方法
- 闪讯利用openwrt路由器拨号教程(一)
- BestCoder Round #56 1002 hdu 5464 (背包问题)
- 位运算符的注意事项
- SQL扩展之T-SQL中的数据定义语言
- ahu - 572