Sistem kaplama pencere (her zaman üstte)oluşturma
-Görüntü tıklanabilir/hep-op-üst bir düğme oluşturmak için çalışıyorum Tüm pencereleri her zaman üstte kalır.
Kanıtı kavramdır
- burada - Smart Taskbar (on AppBrain)
- ve burada V1.4.0 Sidebar style SWKey - Button savior (on xda-developers)
Ben Android kaynak kodundan bu örnek kod aşağıdaki
Başarılı ve çalışan bir servis var artık. Hizmet metin üstünde görüntüler her zaman ekranın sol köşesine kullanıcı serbestçe normal şekilde apps geri kalanı ile etkileşim.
Benim demek istediğim
işin alt ViewGroup
ve pencere yöneticisi kök Ekle
bayrak 5**. Şimdi tıklanabilir görüntü/bir düğme eklemek istiyorum
kendisini dokunma olayları ve alabilirsiniz bu metin yerine. Ben
"bütün ViewGroup
ama "onTouchEvent ağır basan çalıştı
herhangi bir alma olayı.
Nasıl sadece belirli yerlerinde olayların alabilir miyim her zaman-on-top benim bakış grup? Lütfen ö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;
}
}
CEVAP
Bu aptalca bir çözüm olabilir. Ama işe yarıyor. Eğer geliştirmek eğer, lütfen bana bildirin.
Hizmet OnCreate: WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH
bayrak kullandım. Bu hizmet yalnızca değişimdir.
@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.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
params.setTitle("Load Average");
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
wm.addView(mView, params);
}
Şimdi, her tıklama olayı elde başlayacak. Yani, bir olay işleyicisi içinde düzeltmek gerekir.
ViewGroup dokunmatik olayı
@Override
public boolean onTouchEvent(MotionEvent event) {
// ATTENTION: GET THE X,Y OF EVENT FROM THE PARAMETER
// THEN CHECK IF THAT IS INSIDE YOUR DESIRED AREA
Toast.makeText(getContext(),"onTouchEvent", Toast.LENGTH_LONG).show();
return true;
}
Ayrıca bildirim için bu izni eklemek gerekebilir:
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
C belirli bir Zaman Dilimi içinde bir ...
Bulanık kaplama bir görünüm oluşturma...
Nasıl sistem üzerinde sol yürütülebili...
Kullanıcı alan sistem eksik.ne zaman M...
Oluşturma zaman damgası ve son Uyku ve...