1

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

@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;
}

我能够检测到活动背后的触摸(如我所愿)并且烤面包没有出现。但是屏幕是黑色的,除了我放在那里的云。我需要让它透明,如何做到这一点?

4

1 回答 1

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"
  ... />
于 2013-10-19T20:08:42.340 回答