透明和不可触及的活动/服务?

时间:2013-10-19 20:01:41

标签: android service touch overlay

我正在尝试创建一个新的透明活动/服务,以便始终检测屏幕上的长按,这不会干扰用户除了长按之外的常用触摸。到目前为止,我已经能够做到这一点:

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

    this.getWindow().setFlags(
            WindowManager.LayoutParams.TYPE_INPUT_METHOD
                    | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL
                    | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,PixelFormat.TRANSPARENT);
    //this.getWindow().setFormat(PixelFormat.TRANSLUCENT);

    View myview = GestureOverlayView.inflate(getApplicationContext(),
            R.layout.traslucent, null);
    setContentView(myview);
    myview.setOnTouchListener(this);
}

这只是为了测试而不是实际的长按。

@Override
public boolean onTouch(View v, MotionEvent event) {
    // TODO Auto-generated method stub
    Toast.makeText(this, "Click", Toast.LENGTH_LONG).show();
    finish();
    return true;
}

我能够检测到活动背后的触摸(正如我想的那样)并且吐司没有显示出来。但是除了我放在那里的云外,屏幕是黑色的。我需要让它透明,怎么做?

1 个答案:

答案 0 :(得分:0)

您的styles.xml文件中需要一个透明的活动主题。像这样:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="Theme.Transparent" parent="android:Theme">
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowIsFloating">true</item>
    <item name="android:backgroundDimEnabled">false</item>
  </style>
</resources>

然后,在您的AndroidManifest.xml文件中

<activity
  android:name=".MyActivity"
  android:theme="Theme.Transparent"
  ... />