Articles of android windowmanager

如何向Android窗口管理器添加浮动视图并侦听系统/硬件后退按钮事件

我有一个服务,在窗口管理器上显示浮动视图(使用WINDOW_TYPE_ALERT权限)。 我能够显示它并执行操作。 但是,我有两个具体问题: 关于浮动视图的实现 如何监听系统后退按钮事件,以便我可以关闭视图。 执行: 在清单中,我添加了以下权限: 我有一个广播接收器,它将监听报警事件。 收到活动后,我正在启动服务以显示浮动视图。 以下是我用来创建视图的代码。 LayoutParams layOutParams = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, PixelFormat.TRANSLUCENT); 每当用户对视图执行任何操作时,我都会从窗口管理器中删除该视图并终止该服务。 我想知道的是 – 如果这是解决问题的正确方法,还是有更好的方法来解决问题? 而且,我应该更改LayoutParams还是保持原样? 其次,当有SYSTEM BACK / HARDWARE BACK按钮按下事件时,我也想忽略这个浮动视图。 有关如何执行此操作的任何指示都会有所帮助。 附加浮动视图的屏幕截图以便更好地理解:

ICS中的TYPE_SYSTEM_OVERLAY

在Honeycomb中,我能够使用TYPE_SYSTEM_OVERLAY创建系统覆盖,并使用FLAG_WATCH_OUTSIDE_TOUCH接收触摸。 现在ICS改变了一些东西。 我仍然可以创建系统覆盖,但我无法接触。 现在,我能够使用TYPE_SYSTEM_ALERT创建相同的内容并获得触摸,但它只是捕获touchevents,而不是像Honeycomb那样传递它们。 有任何想法吗? 亲切的问候

在arrayadapter中交换数据时,从绑定器存根实现中捕获了RuntimeException

public class MainActivity extends AppCompatActivity { ArrayList list = new ArrayList(); ArrayAdapter adapter; ArrayList data1 = new ArrayList(); ArrayList data2 = new ArrayList(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int i = 0 ; i< 10 ;i++){ data1.add(String.valueOf(i)); } for (int i = 20; i < 30; i++){ data2.add(String.valueOf(i)); } Spinner spinner […]

PopupWindow z订购

我使用PopupWindow播放菜单,它与EditText重叠。 它工作正常,只是我的PopupWindow与EditText IME系统中的一些项目重叠(选择标记,粘贴按钮)。 我的问题是:如何强制我的PopupWindow的z排序,使它出现在那些装饰上面? 这是正在发生的事情的形象。 我需要在所有内容上绘制我的PopupWindow(菜单),从而以某种方式告诉WindowManager如何订购窗口。 谢谢。

Oreo(API 26) – drawOverlay +绘制状态栏

在android oreo中,我不能再使用WindowManager.LayoutParams.TYPE_SYSTEM_ERROR ,而必须使用WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY 。 缺点是,此模式不会覆盖状态栏。 反正有没有实现旧的行为,并能够绘制状态栏? 我有一个侧边栏应用程序,直到现在,我允许用户在屏幕顶部也有触发区域,现在不再工作,因为状态栏现在重叠在顶部的可触摸区域… 我对任何解决方案感兴趣,即使它仅适用于某些设备,例如root设备……因为我觉得这个问题没有正常的解决方案,因为android系统不再允许这样做,如文档中所述( https://developer.android.com/about/versions/oreo/android-8.0-changes.html#o-apps )。 不过,这并不意味着没有替代解决方案……

WindowManager中的全屏

这是我的代码: params = new WindowManager.LayoutParams( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN, PixelFormat.TRANSLUCENT); wm = (WindowManager) getApplicationContext() .getSystemService(Context.WINDOW_SERVICE); inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); mTopView = (ViewGroup) inflater.inflate( R.layout.activity_invisible, null); params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_DIM_BEHIND | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |WindowManager.LayoutParams.FLAG_FULLSCREEN; if(keep==true){ int value = brightnessIntent.getExtras().getInt(“value”); float v=value/255.0f; params.dimAmount=0; params.alpha=v; rl = (RelativeLayout) mTopView.findViewById(R.id.window); getWindow().setAttributes(params); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); wm.addView(mTopView, params); } 视图仍显示状态栏, mTopView是一个叠加窗口。 […]

WindowManager $ BadTokenException无法添加窗口

我正在为背景录像开发应用程序,这就是为什么我使用WindowManager,但它对我没有用。以下错误: 08-23 15:38:21.021: E/AndroidRuntime(4200): java.lang.RuntimeException: Unable to create service com.example.prankapp.BackgroundVideoRecorder: android.view.WindowManager$BadTokenException: Unable to add window android.view.ViewRootImpl$W@418c0b68 — permission denied for this window type 08-23 15:38:21.021: E/AndroidRuntime(4200): at android.app.ActivityThread.handleCreateService(ActivityThread.java:2277) 08-23 15:38:21.021: E/AndroidRuntime(4200): at android.app.ActivityThread.access$1600(ActivityThread.java:128) 08-23 15:38:21.021: E/AndroidRuntime(4200): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1215) 08-23 15:38:21.021: E/AndroidRuntime(4200): at android.os.Handler.dispatchMessage(Handler.java:99) 08-23 15:38:21.021: E/AndroidRuntime(4200): at android.os.Looper.loop(Looper.java:137) 08-23 15:38:21.021: E/AndroidRuntime(4200): at android.app.ActivityThread.main(ActivityThread.java:4517) 08-23 15:38:21.021: […]

有多少个WindowInsets?

我不了解WindowInsets rects,因为docs说: 系统窗口插图表示全屏窗口的区域,该窗口被状态栏,导航栏,IME或其他系统窗口部分或完全遮盖。 因此,多个WindowInsets可以在每个都有自己的rect(一个用于状态栏,另一个用于导航栏……),我该如何检索它们? 或者只有一个WindowInsets,它的左上角 – 右下角坐标是应用程序可用窗口的矩形吗?

使用adjustPan作为软输入模式时是否可以始终显示操作栏?

在我的应用程序中,我有一个带有页脚的ListView ,其中包含一个带有EditText的自定义视图。 在顶部坐着一个动作栏。 当前活动使用SOFT_INPUT_ADJUST_RESIZE ( adjustResize )作为软输入模式,并且在滚动时不关闭键盘。 为了显示更多列表,我想在滚动时删除键盘并获得更平滑的滚动行为,我想更改以便使用SOFT_INPUT_ADJUST_PAN ( adjustPan )。 但是,如果我更改为adjustPan ,则整个视图(包括操作栏)会被推高。 我希望列表视图被推送,但操作栏始终保持在顶部。 这可能吗? 如果没有,是否可以使用adjustResize并获得平滑的resizeanimation? 到目前为止,我尝试过: 请求Window.FEATURE_ACTION_BAR_OVERLAY ,但这并没有帮助,尽管文档听起来很有希望。 根据软键盘是否可见来移动操作栏容器,最终看起来像一个大规模不稳定的黑客,所以我报废了它。 到目前为止,我已经排除了adjustResize ,因为滚动时会出现绘图行为,同时最小化键盘并调整列表视图的大小。 有没有办法使平滑的animationresize?

android从全屏模式退出

我在Android工作。 我需要以全屏模式显示我的活动,我使用以下代码完成此操作。 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 现在看起来像这样: – 现在我想退出这个完整模式,所以我的活动应该像以前一样显示。 喜欢这个:- 我有一个按钮,用于在完全模式或正常模式之间切换,我将一次又一次地切换模式。 请建议我怎么做这个。 意味着如何从全屏获得正常的屏幕。 先谢谢你。