The whole point of that window type is the window can't get any user input.

This is not stuff that third party applications are supposed to do.  I
strongly discourage this -- whatever you do here is likely to break in
future versions of the platform.

On Sat, Dec 18, 2010 at 4:58 PM, Aco <[email protected]> wrote:

> Hi All! I'm trying to create an always-op-top button/clickable-image
> which stays on top of all the windows all the time. The proof of
> concept is here
> http://www.appbrain.com/app/smart-taskbar-%28sidebar%29/com.smart.taskbar
> and here http://forum.xda-developers.com/showthread.php?t=865525 I'm
> following this example code
>
> http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=services/java/com/android/server/LoadAverageService.java;h=0d86429aaa5ccf6ecf311dfb3af0f3ccbf5f8d29;hb=HEAD
>
> I have been successful and have a running service now. The service
> displays some text on top left corner of screen all the time while
> user can freely interact with rest of apps in normal manner. What I'm
> doing is subclass ViewGroup and add it to root window manager with
> flag TYPE_SYSTEM_OVERLAY. Now I want to add a button/clickable-image
> in place of this text which can receive touch events on itself. I
> tried overriding "onTouchEvent" for the whole ViewGroup but it does
> not receive any event. How can I receive events only on certain parts
> of my always-on-top view group? Kindly suggest.
>
> ======
> CODE=
> ======
>
> import android.app.Service;
> import android.content.Context;
> import android.content.Intent;
> import android.graphics.Canvas;
> import android.graphics.Paint;
> import android.graphics.PixelFormat;
> import android.os.IBinder;
> import android.view.Gravity;
> import android.view.MotionEvent;
> import android.view.ViewGroup;
> import android.view.WindowManager;
> import android.widget.AbsoluteLayout;
> import android.widget.Button;
> import android.widget.LinearLayout;
> import android.widget.RelativeLayout;
> import android.widget.Toast;
>
> public class HUD extends Service {
>        HUDView mView;
>
>        @Override
>        public IBinder onBind(Intent intent) {
>                return null;
>        }
>
>        @Override
>        public void onCreate() {
>                super.onCreate();
>                Toast.makeText(getBaseContext(),"onCreate",
> Toast.LENGTH_LONG).show();
>                mView = new HUDView(this);
>                WindowManager.LayoutParams params = new
> WindowManager.LayoutParams(
>                                WindowManager.LayoutParams.WRAP_CONTENT,
>                                WindowManager.LayoutParams.WRAP_CONTENT,
>
>  WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
>                                0,
> //
>  WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
> //                                              |
> WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE,
>                                PixelFormat.TRANSLUCENT);
>                params.gravity = Gravity.RIGHT | Gravity.TOP;
>                params.setTitle("Load Average");
>                WindowManager wm = (WindowManager)
> getSystemService(WINDOW_SERVICE);
>                wm.addView(mView, params);
>        }
>
>        @Override
>        public void onDestroy() {
>                super.onDestroy();
>                Toast.makeText(getBaseContext(),"onDestroy",
> Toast.LENGTH_LONG).show();
>                if(mView != null)
>                {
>                        ((WindowManager)
> getSystemService(WINDOW_SERVICE)).removeView(mView);
>                        mView = null;
>                }
>        }
> }
>
> class HUDView extends ViewGroup {
>        private Paint mLoadPaint;
>
>        public HUDView(Context context) {
>                super(context);
>                Toast.makeText(getContext(),"HUDView",
> Toast.LENGTH_LONG).show();
>
>                mLoadPaint = new Paint();
>                mLoadPaint.setAntiAlias(true);
>                mLoadPaint.setTextSize(10);
>                mLoadPaint.setARGB(255, 255, 0, 0);
>        }
>
>        @Override
>        protected void onDraw(Canvas canvas) {
>                super.onDraw(canvas);
>                canvas.drawText("Hello World", 5, 15, mLoadPaint);
>        }
>
>        @Override
>        protected void onLayout(boolean arg0, int arg1, int arg2, int arg3,
> int arg4) {
>        }
>
>        @Override
>        public boolean onTouchEvent(MotionEvent event) {
>                //return super.onTouchEvent(event);
>                Toast.makeText(getContext(),"onTouchEvent",
> Toast.LENGTH_LONG).show();
>                return true;
>        }
> }
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]<android-developers%[email protected]>
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en
>



-- 
Dianne Hackborn
Android framework engineer
[email protected]

Note: please don't send private questions to me, as I don't have time to
provide private support, and so won't reply to such e-mails.  All such
questions should be posted on public forums, where I and others can see and
answer them.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to