如何向WindowManager添加活动

时间:2014-09-05 12:44:58

标签: android

我正在编写一个需要在客户端应用程序顶部显示活动的android库。经过一些阅读后,似乎我想要添加一个新窗口,所以我添加了这个权限。

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

然后我尝试通过这样做添加图像视图

        windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

        WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.WRAP_CONTENT,
                WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
                PixelFormat.TRANSLUCENT);

        params.gravity = Gravity.BOTTOM | Gravity.LEFT;
        params.x = 10;
        params.y = 100;

        ImageView imageview = new ImageView(this);

        imageview.setImageResource(R.drawable.avatar);
        windowManager.addView( imageview , params);

但我想要的是在客户端应用程序窗口顶部的这个新窗口上拥有自己的活动。这有可能吗?我该怎么做?

1 个答案:

答案 0 :(得分:6)

好的,对此的正确方法似乎是在服务类中扩充布局并将其添加到windowmanager那样。然后创建一个常规java类,可以将其用作该布局中操作的事件侦听器。我不需要使用片段或活动。

mRootLayout = (LinearLayout) LayoutInflater.from(context).
                inflate(R.layout.myContainerXML, null);
MyListManager myListManager = new MyListManager(mRootLayout,context);

WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.MATCH_PARENT,
                WindowManager.LayoutParams.TYPE_PHONE,
                WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
                PixelFormat.TRANSLUCENT);

ListView listView = (ListView) mRootLayout.findViewById(R.id.listView);
        final MyListAdapter adapter = new MyListAdapter(activity,R.layout.list_row,(ArrayList)myListManager.getList());
        listView.setAdapter(adapter);

windowManager.addView(mRootLayout, params);

如果有人有更好的方式,我很乐意听到它,谢谢