Her zaman tüm pencerelerin üstünde kalır her zaman op-top düğmesi / tıklanabilir görüntü oluşturmaya çalışıyorum.
Kavramın kanıtı
- burada - Akıllı Görev Çubuğu (AppBrain'de)
- ve burada V1.4.0 Kenar çubuğu stili SWKey - Düğme kurtarıcısı (xda geliştiricileri üzerinde)
Başarılı oldum ve şimdi çalışan bir hizmetim var. Kullanıcı her zaman ekranın sol üst köşesinde bazı metinler görüntülerken kullanıcı diğer uygulamalarla normal şekilde serbestçe etkileşime girebilir.
Yaptığım şey alt sınıf ViewGroup
ve bayraklı kök pencere yöneticisine eklemek TYPE_SYSTEM_OVERLAY
. Şimdi bu metnin yerine dokunma olayları alabilen bir düğme / tıklanabilir görüntü eklemek istiyorum. Bütün "onTouchEvent" geçersiz kılmayı denedim ViewGroup
ama herhangi bir olay almaz.
Her zaman üstte görüntüleme grubumun yalnızca belirli bölümlerinde nasıl etkinlik alabilirim? Nazikçe öneririz.
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;
}
}
onDraw()
. Bunun dispatchDraw()
yerine geçersiz kılınmamalı mı? Bkz. Groups.google.com/forum/?fromgroups#!topic/android-developers/…