请问一下我系统更新后,悬浮窗口的关闭按钮没有了怎么没有了,不能结束应用

当前位置: &
& 华为荣耀7i怎么启用悬浮按钮方法
华为荣耀7i怎么启用悬浮按钮方法
扫描二维码查看并分享给您的朋友
  华为荣耀7i怎么启用悬浮按钮,接下来XP510小编为用户们介绍一下华为荣耀7i怎样启用悬浮按钮,一起来看看吧。
  华为荣耀7i如何启用悬浮按钮教程:
  第一种方式:手机顶部向下滑,弄出导航栏,有一个悬浮按钮的选项,点击开启
  返回桌面,剁了一个小白点,点开有下面功能,返回等等功能
  第二种方式:找到设置-全局设置,找到悬浮按钮,开启即可,是不是很人性化?
您看完本文的心情是:
看过本文的人还看过
2.85M | 简体中文
41.5M | 简体中文
53.5M | 简体中文
41.9M | 简体中文
6.41M | 简体中文
27.9M | 简体中文
19.23M | 简体中文
2.08M | 简体中文
113.52M | 简体中文
注:您的评论需要经过审核才能显示哦,请文明发言!
本站资源均收集整理于互联网,其著作权归原作者所有,如果有侵犯您权利的资源,请来信告知,我们将及时撤销相应资源。
Copy . All Rights Reserved.我的酷派手机系统更新后原来的软件桌面上没有了_百度知道82509人阅读
android(39)
WindowManager主要用来管理窗口的一些状态、屏幕分辨率、属性、view增加、删除、更新、窗口顺序、消息收集和处理等。其继承于ViewManager,获取这个对象有两种方式:
1、Activity.getWindowManager();
2、(WindowManager)Context.getSystemService(Context.Window_SERVICE);
其中有主要用到3个方法:
1、添加窗口
public void addView(View view, ViewGroup.LayoutParams params);
2、删除窗口
public void removeView(View view);
3、更新窗口
public void updateViewLayout(View view, ViewGroup.LayoutParams params);
还可以利用WindowManager获取屏幕的分辨率:
// 屏幕的宽度
wManager = contextActivity.getWindowManager();
DisplayMetrics dm = new DisplayMetrics();
wManager.getDefaultDisplay().getMetrics(dm);
//屏幕宽度
screenWith = dm.widthP
//屏幕高度
screenheigt=dm.heightP
其内部有一个静态类,windowManager.LayoutParams,这个类可以设置窗口的各种属性,下面对这个类做一下介绍。
继承关系&:
java.lang.Object
&& ?android.view.ViewGroup.LayoutParams
&&&&&& ?android.view.WindowManager.LayoutParams
各种属性:
1.public&int&x;&如果忽略gravity属性,那么它表示窗口的绝对X位置。& &什么是gravity属性呢?简单地说,就是窗口如何停靠。& 当设置了 Gravity.LEFT&或 Gravity.RIGHT&之后,x值就表示到特定边的距离。
2.&public&int&y;&如果忽略gravity属性,那么它表示窗口的绝对Y位置。&当设置了 Gravity.TOP&或 Gravity.BOTTOM&之后,y值就表示到特定边的距离。
3.&public float&horizontalW&public float&verticalW&在纵/横向上,为关联的view预留了多少扩展空间(像素)。如果是0,那么此view不能被拉伸。
& &其他情况下,扩展空间(像素)将被widget所均分。
4.public&int&
窗口类型。有3种主要类型:
Applicationwindows:
& & & & 取值在&FIRST_APPLICATION_WINDOW&和&LAST_APPLICATION_WINDOW&之间。是通常的、顶层的应用程序窗口。必须将
token 设置成 activity 的 token 。
Sub_windows:
& & & & 取值在&FIRST_SUB_WINDOW&和&LAST_SUB_WINDOW&之间。&与顶层窗口相关联,token
必须设置为它所附着的宿主窗口的 token。
Systemwindows:
& & & & 取值在&FIRST_SYSTEM_WINDOW&和&LAST_SYSTEM_WINDOW&之间。用于特定的系统功能。它不能用于应用程序,使用时需要特殊权限。
下面定义了&type&的取值:
& & &&应用程序窗口。
& & &&public static final int&FIRST_APPLICATION_WINDOW&= 1;
& & & 所有程序窗口的“基地”窗口,其他应用程序窗口都显示在它上面。 & &&
& & &&public static final int&TYPE_BASE_APPLICATION&&&=1; & &
& & & 普通应哟功能程序窗口。token必须设置为Activity的token,以指出该窗口属谁。
& & & public static final int&TYPE_APPLICATION&&&&&&&= 2;
& & & &用于应用程序启动时所显示的窗口。应用本身不要使用这种类型。
& & & 它用于让系统显示些信息,直到应用程序可以开启自己的窗口。 &&
& & & public static final int&TYPE_APPLICATION_STARTING&= 3;&
& & &应用程序窗口结束。
& & & public static final int&LAST_APPLICATION_WINDOW&= 99;
& & & 子窗口。子窗口的Z序和坐标空间都依赖于他们的宿主窗口。
& & &&public static final int&FIRST_SUB_WINDOW&&&&&&&= 1000;
& & & 面板窗口,显示于宿主窗口上层。
& & &&public static final int&TYPE_APPLICATION_PANEL&&=&FIRST_SUB_WINDOW;
& & & 媒体窗口,例如视频。显示于宿主窗口下层。
& & &&public static final int&TYPE_APPLICATION_MEDIA&&=&FIRST_SUB_WINDOW+1;
& & & 应用程序窗口的子面板。显示于所有面板窗口的上层。(GUI的一般规律,越“子”越靠上)
& & &&public static final int&TYPE_APPLICATION_SUB_PANEL&=&FIRST_SUB_WINDOW&+2;
& & & 对话框。类似于面板窗口,绘制类似于顶层窗口,而不是宿主的子窗口。
& & &&public static final int&TYPE_APPLICATION_ATTACHED_DIALOG&=&FIRST_SUB_WINDOW&+3;
& & & 媒体信息。显示在媒体层和程序窗口之间,需要实现透明(半透明)效果。(例如显示字幕)
& & &&public static final int&TYPE_APPLICATION_MEDIA_OVERLAY&&=&FIRST_SUB_WINDOW&+4;
& & & 子窗口结束。( End of types of sub-windows )
& & &&public static final int&LAST_SUB_WINDOW&&&&&&&&= 1999;
& & & 系统窗口。非应用程序创建。
& & &public static final int&FIRST_SYSTEM_WINDOW&&&&= 2000;
& & & 状态栏。只能有一个状态栏;它位于屏幕顶端,其他窗口都位于它下方。
& & &public static final int&TYPE_STATUS_BAR&&&&&&&&=&&FIRST_SYSTEM_WINDOW;
& & & 搜索栏。只能有一个搜索栏;它位于屏幕上方。
& & &&public static final int&TYPE_SEARCH_BAR&&&&&&&&=&FIRST_SYSTEM_WINDOW+1;
& & & 电话窗口。它用于电话交互(特别是呼入)。它置于所有应用程序之上,状态栏之下。
& & &&public static final int&TYPE_PHONE&&&&&&&&&&&&=&FIRST_SYSTEM_WINDOW+2;
& & & 系统提示。它总是出现在应用程序窗口之上。
& & &&public static final int&TYPE_SYSTEM_ALERT&&&&&&=&&FIRST_SYSTEM_WINDOW&+3;
& & & 锁屏窗口。
& & &&public static final int&TYPE_KEYGUARD&&&&&&&&&&=&FIRST_SYSTEM_WINDOW&+4;
& & & 信息窗口。用于显示toast。
& & &&public static final int&TYPE_TOAST&&&&&&&&&&&&=&FIRST_SYSTEM_WINDOW&+5;
& & & 系统顶层窗口。显示在其他一切内容之上。此窗口不能获得输入焦点,否则影响锁屏。
& & &&public static final int&TYPE_SYSTEM_OVERLAY&&&&=&&FIRST_SYSTEM_WINDOW&+6;
& & & 电话优先,当锁屏时显示。此窗口不能获得输入焦点,否则影响锁屏。
& & &&public static final int&TYPE_PRIORITY_PHONE&&&&=&&FIRST_SYSTEM_WINDOW&+7;
& & & 系统对话框。(例如音量调节框)。
& & &&public static final int&TYPE_SYSTEM_DIALOG&&&&&=&&FIRST_SYSTEM_WINDOW&+8;
& & & 锁屏时显示的对话框。
& & &&public static final int&TYPE_KEYGUARD_DIALOG&&&=&&FIRST_SYSTEM_WINDOW&+9;
& & & 系统内部错误提示,显示于所有内容之上。
& & &&public static final int&TYPE_SYSTEM_ERROR&&&&&&=&&FIRST_SYSTEM_WINDOW&+10;
& & & 内部输入法窗口,显示于普通UI之上。应用程序可重新布局以免被此窗口覆盖。
& & &&public static final int&TYPE_INPUT_METHOD&&&&&&=&&FIRST_SYSTEM_WINDOW&+11;
& & & 内部输入法对话框,显示于当前输入法窗口之上。
& & &&public static final int&TYPE_INPUT_METHOD_DIALOG=&FIRST_SYSTEM_WINDOW&+12;
& & & 墙纸窗口。&public static final int&TYPE_WALLPAPER&&&&&&&&&=&FIRST_SYSTEM_WINDOW&+13;
& & & 状态栏的滑动面板。&public static final int&TYPE_STATUS_BAR_PANEL&&&=&FIRST_SYSTEM_WINDOW&+14;
& & & 系统窗口结束。& &&&public static final int&LAST_SYSTEM_WINDOW&&&&&=
在工作中做一款游戏SDK,里面有一个效果就是有一个悬浮按钮浮在游戏上面,点击可以弹出一个框,在框里有两个按钮,点击按钮可以进入对应的条目,这个我就是用的windowmanager实现的,先来上个效果图:
给这个类的代码贴一下吧,源码就不给了,~~~~~~~~~
public class FloatingViewController {
private Button bbsBtn, hideB
private TextView bbsTV, hideTV;
private LinearLayout containerL
private WindowManager.LayoutParams wmP
private WindowManager.LayoutParams wmcP
private WindowManager wM
// 当前手指所在屏幕中的坐标
private float xInS
private float yInS
private float xS
private float yS
private int loacation[] = new int[] { 0, 0 };
// 窗口中的位置的坐标
private float xInV
private float yInV
private Button circleB
private int screenWidth = 0;
private static float screenScale = 0;
private int statusBarH
private int viewLength = 0;
private int screenW
private SharedPreferences locationP
private static Activity contextA
private FloatingViewController() {
private static FloatingViewC
public static FloatingViewController getInstance(Activity context) {
contextActivity =
if (fvc == null) {
fvc = new FloatingViewController();
public void show() {
if (count & 1) {
wManager = contextActivity.getWindowManager();
Display display = wManager.getDefaultDisplay();
screenWith = display.getWidth();
wmParams = new WindowManager.LayoutParams();
wmParams.format = PixelFormat.RGBA_8888;
wmParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
wmParams.gravity = Gravity.LEFT | Gravity.TOP;
wmParams.type = WindowManager.LayoutParams.TYPE_APPLICATION;
circleButton = new Button(contextActivity);
screenWidth = new SizeUtils(contextActivity).sysW
if (screenScale == 0) {
if (new SizeUtils(contextActivity).screenHeightScale & new SizeUtils(
contextActivity).screenWidthScale)
screenScale = new SizeUtils(contextActivity).screenHeightS
screenScale = new SizeUtils(contextActivity).screenWidthS
viewLength = (int) (235 * screenScale);
circleButton.setBackgroundDrawable(contextActivity.getResources()
.getDrawable(
MResource.getIdByName(contextActivity, &drawable&,
&overlay_logo&)));
circleButton.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
xInView = event.getX();
yInView = event.getY();
xScreen = event.getRawX();
yScreen = event.getRawY() - getStatusBarHeight();
Log.e(&按下&, xScreen + &按下& + yScreen);
case MotionEvent.ACTION_MOVE:
if (containerLayout != null)
containerLayout.setVisibility(View.INVISIBLE);
xInScreen = event.getRawX();
yInScreen = event.getRawY() - getStatusBarHeight();
updateViewPosition();
Log.e(&移动&, &移动&);
case MotionEvent.ACTION_UP:
Log.e(&触摸弹起&, xInScreen + &触摸弹起& + yInScreen);
xInScreen = event.getRawX();
yInScreen = event.getRawY() - getStatusBarHeight();
if (xInScreen &= screenWith / 2) {// 图标icon吸附在左边
wmParams.x = 0;
} else {// 图标icon吸附在右边
wmParams.x = screenW
if (Math.abs(xInScreen - xScreen) & 5
&& Math.abs(yInScreen - yScreen) & 5) {
circleButton.getLocationOnScreen(loacation);
int viewRight = screenWidth
- (wmParams.x + wmParams.width / 2);
int viewLeft = wmParams.x;
if (viewLeft & viewLength && containerLayout == null) {
openLeftBigWindow();
} else if (viewRight & viewLength
&& containerLayout == null) {
openRightBigWindow();
removeBigWindow();
wManager.updateViewLayout(circleButton, wmParams);
Editor editor = locationPreferences.edit();
editor.putFloat(&x&, (int) xInScreen);
editor.putFloat(&y&, (int) yInScreen);
wmParams.width = wmParams.height = (int) (60 * screenScale);
locationPreferences = contextActivity
.getPreferences(android.content.Context.MODE_PRIVATE);
xInScreen = locationPreferences.getFloat(&x&, new SizeUtils(
contextActivity).sysWidth);
yInScreen = locationPreferences.getFloat(&y&, new SizeUtils(
contextActivity).sysHeight / 2);
xInView = 60;
yInView = 60;
wmParams.x = 0;
wmParams.y = (int) yInS
wManager.addView(circleButton, wmParams);
// updateViewPosition();
private void updateViewPosition() {
wmParams.x = (int) (xInScreen - xInView);
wmParams.y = (int) (yInScreen - yInView);
wManager.updateViewLayout(circleButton, wmParams);
Editor editor = locationPreferences.edit();
editor.putFloat(&x&, (int) xInScreen);
editor.putFloat(&y&, (int) yInScreen);
protected void openLeftBigWindow() {
if (wmcParams == null) {
wmcParams = new WindowManager.LayoutParams();
wmcParams.format = PixelFormat.RGBA_8888;
wmcParams.type = WindowManager.LayoutParams.TYPE_APPLICATION;
wmcParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
wmcParams.gravity = Gravity.LEFT | Gravity.TOP;
wmcParams.x = (int) (loacation[0] - viewLength);
wmcParams.y = (int) (wmParams.y);
wmcParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
wmcParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
containerLayout = new LinearLayout(contextActivity);
containerLayout.setBackgroundResource(MResource.getIdByName(
contextActivity, &drawable&, &overlay_lift&));
bbsTV = new TextView(contextActivity);
bbsTV.setText(&账户&);
bbsTV.setTextColor(Color.WHITE);
hideTV = new TextView(contextActivity);
hideTV.setText(&隐藏&);
hideTV.setTextColor(Color.WHITE);
hideBtn = new Button(contextActivity);
hideBtn.setBackgroundResource(MResource.getIdByName(
contextActivity, &drawable&, &overlay_hide&));
hideBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AnimationSet set = new AnimationSet(true);
set.addAnimation(new ScaleAnimation(1f, 1.5f, 1f, 1.5f));
set.setDuration(300);
set.setInterpolator(new AnticipateOvershootInterpolator(9F));
count = 0;
hideBtn.startAnimation(set);
hideTV.startAnimation(set);
removeAllWindow();
bbsBtn = new Button(contextActivity);
bbsBtn.setBackgroundResource(MResource.getIdByName(contextActivity,
&drawable&, &overlay_account&));
bbsBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AnimationSet set = new AnimationSet(true);
set.addAnimation(new ScaleAnimation(1f, 1.2f, 1f, 1.2f));
set.setDuration(300);
set.setInterpolator(new AnticipateOvershootInterpolator(9f));
set.setInterpolator(new BounceInterpolator());
bbsBtn.startAnimation(set);
bbsTV.startAnimation(set);
if (containerLayout != null)
containerLayout.setVisibility(View.INVISIBLE);
Intent intent = new Intent(contextActivity,
AccountActivity.class);
contextActivity.startActivity(intent);
containerLayout.setLayoutParams(new LinearLayout.LayoutParams(256,
containerLayout.setPadding(10, 10, 10, 10);
containerLayout.setGravity(Gravity.CENTER_VERTICAL);
LinearLayout.LayoutParams bbsLayoutParams = new LinearLayout.LayoutParams(
bbsLayoutParams.setMargins(0, 0, 0, 0);
// LayoutParams homeParams = new LinearLayout.LayoutParams(60, 60);
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
textParams.setMargins(10, 0, 0, 0);
LinearLayout.LayoutParams hideTextLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
hideTextLayoutParams.setMargins(10, 0, 0, 0);
LinearLayout.LayoutParams hideLayoutParams = new LinearLayout.LayoutParams(
hideLayoutParams.setMargins(20, 0, 0, 0);
bbsBtn.setLayoutParams(bbsLayoutParams);
hideBtn.setLayoutParams(hideLayoutParams);
bbsTV.setLayoutParams(textParams);
hideTV.setLayoutParams(hideTextLayoutParams);
containerLayout.addView(bbsBtn);
containerLayout.addView(bbsTV);
containerLayout.addView(hideBtn);
containerLayout.addView(hideTV);
RelayoutViewTool
.relayoutViewWithScale(containerLayout, screenScale);
wManager.addView(containerLayout, wmcParams);
removeBigWindow();
protected void openRightBigWindow() {
if (wmcParams == null) {
wmcParams = new WindowManager.LayoutParams();
wmcParams.format = PixelFormat.RGBA_8888;
wmcParams.type = WindowManager.LayoutParams.TYPE_APPLICATION;
wmcParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
wmcParams.gravity = Gravity.LEFT | Gravity.TOP;
Log.e(&test&, wmcParams.width + &--wmcparm&);
wmcParams.x = (int) (loacation[0] + wmParams.width);
wmcParams.y = (int) (wmParams.y);
Log.e(&wmcParams&, wmParams.x + &vs& + wmParams.y + &(&
+ wmcParams.x + &--& + wmcParams.y + &)&);
wmcParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
wmcParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
containerLayout = new LinearLayout(contextActivity);
containerLayout.setBackgroundResource(MResource.getIdByName(
contextActivity, &drawable&, &overlay_right&));
bbsTV = new TextView(contextActivity);
bbsTV.setText(&账户&);
bbsTV.setTextColor(Color.WHITE);
hideTV = new TextView(contextActivity);
hideTV.setText(&隐藏&);
hideTV.setTextColor(Color.WHITE);
hideBtn = new Button(contextActivity);
hideBtn.setBackgroundResource(MResource.getIdByName(
contextActivity, &drawable&, &overlay_hide&));
hideBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AnimationSet set = new AnimationSet(true);
set.addAnimation(new ScaleAnimation(1f, 1.5f, 1f, 1.5f));
set.setDuration(300);
set.setInterpolator(new AnticipateOvershootInterpolator(9F));
// set.setInterpolator(new BounceInterpolator());
hideBtn.startAnimation(set);
hideTV.startAnimation(set);
count = 0;
removeAllWindow();
bbsBtn = new Button(contextActivity);
bbsBtn.setBackgroundResource(MResource.getIdByName(contextActivity,
&drawable&, &overlay_account&));
bbsBtn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
AnimationSet set = new AnimationSet(true);
set.addAnimation(new ScaleAnimation(1f, 1.2f, 1f, 1.2f));
set.setDuration(300);
set.setInterpolator(new AnticipateOvershootInterpolator(9f));
set.setInterpolator(new BounceInterpolator());
bbsBtn.startAnimation(set);
bbsTV.startAnimation(set);
if (containerLayout != null)
containerLayout.setVisibility(View.INVISIBLE);
Intent intent = new Intent(contextActivity,
AccountActivity.class);
contextActivity.startActivity(intent);
containerLayout.setLayoutParams(new LinearLayout.LayoutParams(256,
containerLayout.setPadding(10, 10, 10, 10);
containerLayout.setGravity(Gravity.CENTER_VERTICAL);
LinearLayout.LayoutParams bbsLayoutParams = new LinearLayout.LayoutParams(
bbsLayoutParams.setMargins(20, 0, 0, 0);
// LayoutParams homeParams = new LinearLayout.LayoutParams(60, 60);
LinearLayout.LayoutParams textParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
textParams.setMargins(10, 0, 0, 0);
LinearLayout.LayoutParams hideTextLayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
hideTextLayoutParams.setMargins(10, 0, 0, 0);
LinearLayout.LayoutParams hideLayoutParams = new LinearLayout.LayoutParams(
hideLayoutParams.setMargins(20, 0, 0, 0);
bbsBtn.setLayoutParams(bbsLayoutParams);
hideBtn.setLayoutParams(hideLayoutParams);
bbsTV.setLayoutParams(textParams);
hideTV.setLayoutParams(hideTextLayoutParams);
containerLayout.addView(bbsBtn);
containerLayout.addView(bbsTV);
containerLayout.addView(hideBtn);
containerLayout.addView(hideTV);
RelayoutViewTool
.relayoutViewWithScale(containerLayout, screenScale);
wManager.addView(containerLayout, wmcParams);
removeBigWindow();
protected void removeBigWindow() {
if (containerLayout != null && wmcParams != null) {
wManager.removeView(containerLayout);
containerLayout =
wmcParams =
// if(containerLayout==null){
// wManager.removeView(containerLayout);
public void removeAllWindow() {
removeBigWindow();
wManager.removeView(circleButton);
circleButton =
wManager =
private int getStatusBarHeight() {
if (statusBarHeight == 0) {
@SuppressWarnings(&rawtypes&)
Class c = Class.forName(&com.android.internal.R$dimen&);
Object o = c.newInstance();
Field field = c.getField(&status_bar_height&);
int x = field.getInt(o);
statusBarHeight = contextActivity.getResources()
.getDimensionPixelSize(x);
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return statusBarH
public void destroyFloat() {
if (containerLayout != null) {
removeAllWindow();
if (containerLayout == null&&circleButton != null) {
wManager.removeView(circleButton);
circleButton =
wManager =
if (fvc != null) {
count = 0;
removeAllWindow();
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:2530764次
积分:4223
积分:4223
排名:第5148名
原创:49篇
评论:21条
阅读:113477
(1)(2)(3)(15)(25)(3)(1)
完整的介绍了26中设计模式在Android及java中的应用

我要回帖

更多关于 android 悬浮按钮 的文章

 

随机推荐